From 4fe034e9949cc98d62c5e31183a53643659e2773 Mon Sep 17 00:00:00 2001 From: willclarktech Date: Thu, 10 Sep 2020 11:51:39 +0200 Subject: [PATCH] crypto: Add Secp256k1Signature.toFixedLength method --- packages/crypto/src/secp256k1signature.spec.ts | 9 +++++++++ packages/crypto/src/secp256k1signature.ts | 4 ++++ packages/crypto/types/secp256k1signature.d.ts | 1 + 3 files changed, 14 insertions(+) diff --git a/packages/crypto/src/secp256k1signature.spec.ts b/packages/crypto/src/secp256k1signature.spec.ts index 27b58767..9baa7fe6 100644 --- a/packages/crypto/src/secp256k1signature.spec.ts +++ b/packages/crypto/src/secp256k1signature.spec.ts @@ -76,6 +76,15 @@ describe("Secp256k1Signature", () => { ).toThrowError(/unsigned integer s must be encoded as unpadded big endian./i); }); + it("can be encoded as fixed length", () => { + const signature = new Secp256k1Signature(new Uint8Array([0x22, 0x33]), new Uint8Array([0xaa])); + expect(signature.toFixedLength()).toEqual( + fromHex( + "000000000000000000000000000000000000000000000000000000000000223300000000000000000000000000000000000000000000000000000000000000aa", + ), + ); + }); + it("can encode to DER", () => { // Signature 3045022100f25b86e1d8a11d72475b3ed273b0781c7d7f6f9e1dae0dd5d3ee9b84f3fab891022063d9c4e1391de077244583e9a6e3d8e8e1f236a3bf5963735353b93b1a3ba935 // decoded by http://asn1-playground.oss.com/ diff --git a/packages/crypto/src/secp256k1signature.ts b/packages/crypto/src/secp256k1signature.ts index 0defcb19..be10f026 100644 --- a/packages/crypto/src/secp256k1signature.ts +++ b/packages/crypto/src/secp256k1signature.ts @@ -119,6 +119,10 @@ export class Secp256k1Signature { } } + public toFixedLength(): Uint8Array { + return new Uint8Array([...this.r(32), ...this.s(32)]); + } + public toDer(): Uint8Array { // DER supports negative integers but our data is unsigned. Thus we need to prepend // a leading 0 byte when the higest bit is set to differentiate nagative values diff --git a/packages/crypto/types/secp256k1signature.d.ts b/packages/crypto/types/secp256k1signature.d.ts index 1b7a5025..627b53e2 100644 --- a/packages/crypto/types/secp256k1signature.d.ts +++ b/packages/crypto/types/secp256k1signature.d.ts @@ -12,6 +12,7 @@ export declare class Secp256k1Signature { constructor(r: Uint8Array, s: Uint8Array); r(length?: number): Uint8Array; s(length?: number): Uint8Array; + toFixedLength(): Uint8Array; toDer(): Uint8Array; } /**