Prevent signing invalid digests.
This commit is contained in:
parent
5813b316d7
commit
83d01f86ba
@ -2,7 +2,8 @@
|
|||||||
import * as secp256k1 from "@noble/secp256k1";
|
import * as secp256k1 from "@noble/secp256k1";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
concat, getBytes, getBytesCopy, hexlify, toHex, throwArgumentError
|
concat, dataLength, getBytes, getBytesCopy, hexlify, toHex,
|
||||||
|
assertArgument, throwArgumentError
|
||||||
} from "../utils/index.js";
|
} from "../utils/index.js";
|
||||||
|
|
||||||
import { computeHmac } from "./hmac.js";
|
import { computeHmac } from "./hmac.js";
|
||||||
@ -38,9 +39,7 @@ export class SigningKey {
|
|||||||
get compressedPublicKey(): string { return SigningKey.computePublicKey(this.#privateKey, true); }
|
get compressedPublicKey(): string { return SigningKey.computePublicKey(this.#privateKey, true); }
|
||||||
|
|
||||||
sign(digest: BytesLike): Frozen<Signature> {
|
sign(digest: BytesLike): Frozen<Signature> {
|
||||||
/* @TODO
|
assertArgument(dataLength(digest) === 32, "invalid digest length", "digest", digest);
|
||||||
logger.assertArgument(() => (dataLength(digest) === 32), "invalid digest length", "digest", digest);
|
|
||||||
*/
|
|
||||||
|
|
||||||
const [ sigDer, recid ] = secp256k1.signSync(getBytesCopy(digest), getBytesCopy(this.#privateKey), {
|
const [ sigDer, recid ] = secp256k1.signSync(getBytesCopy(digest), getBytesCopy(this.#privateKey), {
|
||||||
recovered: true,
|
recovered: true,
|
||||||
@ -48,7 +47,6 @@ export class SigningKey {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const sig = secp256k1.Signature.fromHex(sigDer);
|
const sig = secp256k1.Signature.fromHex(sigDer);
|
||||||
|
|
||||||
return Signature.from({
|
return Signature.from({
|
||||||
r: toHex("0x" + sig.r.toString(16), 32),
|
r: toHex("0x" + sig.r.toString(16), 32),
|
||||||
s: toHex("0x" + sig.s.toString(16), 32),
|
s: toHex("0x" + sig.s.toString(16), 32),
|
||||||
@ -81,6 +79,8 @@ export class SigningKey {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static recoverPublicKey(digest: BytesLike, signature: SignatureLike): string {
|
static recoverPublicKey(digest: BytesLike, signature: SignatureLike): string {
|
||||||
|
assertArgument(dataLength(digest) === 32, "invalid digest length", "digest", digest);
|
||||||
|
|
||||||
const sig = Signature.from(signature);
|
const sig = Signature.from(signature);
|
||||||
const der = secp256k1.Signature.fromCompact(getBytesCopy(concat([ sig.r, sig.s ]))).toDERRawBytes();
|
const der = secp256k1.Signature.fromCompact(getBytesCopy(concat([ sig.r, sig.s ]))).toDERRawBytes();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user