public static function serializeSig($r, $s)
{
$dec = '';
$byte = '';
$seq = '';
$digits = array();
$retval = array();
for ($x = 0; $x < 256; $x++) {
$digits[$x] = chr($x);
}
$dec = Util::decodeHex($r);
while (Math::cmp($dec, '0') > 0) {
$dv = Math::div($dec, '256');
$rem = Math::mod($dec, '256');
$dec = $dv;
$byte = $byte . $digits[$rem];
}
$byte = strrev($byte);
// msb check
if (Math::cmp('0x' . bin2hex($byte[0]), '0x80') >= 0) {
$byte = chr(0x0) . $byte;
}
$retval['bin_r'] = bin2hex($byte);
$seq = chr(0x2) . chr(strlen($byte)) . $byte;
$dec = Util::decodeHex($s);
$byte = '';
while (Math::cmp($dec, '0') > 0) {
$dv = Math::div($dec, '256');
$rem = Math::mod($dec, '256');
$dec = $dv;
$byte = $byte . $digits[$rem];
}
$byte = strrev($byte);
// msb check
if (Math::cmp('0x' . bin2hex($byte[0]), '0x80') >= 0) {
$byte = chr(0x0) . $byte;
}
$retval['bin_s'] = bin2hex($byte);
$seq = $seq . chr(0x2) . chr(strlen($byte)) . $byte;
$seq = chr(0x30) . chr(strlen($seq)) . $seq;
$retval['seq'] = bin2hex($seq);
return $retval;
}