forked from jsnbuchanan/crowd-funder-for-time-pwa
refactor: use our own SimpleSigner since library version is deprecated
This commit is contained in:
7
package-lock.json
generated
7
package-lock.json
generated
@@ -26,6 +26,7 @@
|
||||
"class-transformer": "^0.5.1",
|
||||
"core-js": "^3.26.1",
|
||||
"dexie": "^3.2.2",
|
||||
"did-jwt": "^6.9.0",
|
||||
"ethereum-cryptography": "^1.1.2",
|
||||
"ethereumjs-util": "^7.1.5",
|
||||
"ethr-did-resolver": "^8.0.0",
|
||||
@@ -12186,9 +12187,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/did-jwt": {
|
||||
"version": "6.10.1",
|
||||
"resolved": "https://registry.npmjs.org/did-jwt/-/did-jwt-6.10.1.tgz",
|
||||
"integrity": "sha512-YJOvkuPKKX364ooAFNxZPcz/KBLRwLhRABQVQlVEqOjygsCkplNFB3UL97UqZ7Y3cAG6Jh5jKoAC4xFSm+h0qw==",
|
||||
"version": "6.9.0",
|
||||
"resolved": "https://registry.npmjs.org/did-jwt/-/did-jwt-6.9.0.tgz",
|
||||
"integrity": "sha512-kZ8pakovM2VkG0pia6x0SA9/1rl9dOUti4i2FL3xg7arJDWW7dACJxX+6gQK7iR/DvXrfFo8F784ejHVbw9ryA==",
|
||||
"dependencies": {
|
||||
"@stablelib/ed25519": "^1.0.2",
|
||||
"@stablelib/random": "^1.0.1",
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
"class-transformer": "^0.5.1",
|
||||
"core-js": "^3.26.1",
|
||||
"dexie": "^3.2.2",
|
||||
"did-jwt": "^6.9.0",
|
||||
"ethereum-cryptography": "^1.1.2",
|
||||
"ethereumjs-util": "^7.1.5",
|
||||
"ethr-did-resolver": "^8.0.0",
|
||||
|
||||
@@ -5,44 +5,8 @@ import { entropyToMnemonic } from "ethereum-cryptography/bip39";
|
||||
import { wordlist } from "ethereum-cryptography/bip39/wordlists/english";
|
||||
import { HDNode } from "@ethersproject/hdnode";
|
||||
import * as didJwt from "did-jwt";
|
||||
import { Signer } from "did-jwt";
|
||||
import * as u8a from "uint8arrays";
|
||||
|
||||
export function hexToBytes(s: string): Uint8Array {
|
||||
const input = s.startsWith("0x") ? s.substring(2) : s;
|
||||
return u8a.fromString(input.toLowerCase(), "base16");
|
||||
}
|
||||
|
||||
export function fromJose(signature: string): {
|
||||
r: string;
|
||||
s: string;
|
||||
recoveryParam?: number;
|
||||
} {
|
||||
const signatureBytes: Uint8Array = base64ToBytes(signature);
|
||||
if (signatureBytes.length < 64 || signatureBytes.length > 65) {
|
||||
throw new TypeError(
|
||||
`Wrong size for signature. Expected 64 or 65 bytes, but got ${signatureBytes.length}`
|
||||
);
|
||||
}
|
||||
const r = bytesToHex(signatureBytes.slice(0, 32));
|
||||
const s = bytesToHex(signatureBytes.slice(32, 64));
|
||||
const recoveryParam =
|
||||
signatureBytes.length === 65 ? signatureBytes[64] : undefined;
|
||||
return { r, s, recoveryParam };
|
||||
}
|
||||
|
||||
export function bytesToHex(b: Uint8Array): string {
|
||||
return u8a.toString(b, "base16");
|
||||
}
|
||||
|
||||
export function base64ToBytes(s: string): Uint8Array {
|
||||
const inputBase64Url = s
|
||||
.replace(/\+/g, "-")
|
||||
.replace(/\//g, "_")
|
||||
.replace(/=/g, "");
|
||||
return u8a.fromString(inputBase64Url, "base64url");
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
@@ -117,12 +81,8 @@ export const createIdentifier = (): string => {
|
||||
export const accessToken = async (identifier: IIdentifier) => {
|
||||
const did: string = identifier.did;
|
||||
const privateKeyHex: string = identifier.keys[0].privateKeyHex as string;
|
||||
//const input = privateKeyHex.startsWith("0x")
|
||||
// ? privateKeyHex.substring(2)
|
||||
// : privateKeyHex;
|
||||
//const privateKeyBytes = u8a.fromString(input.toLowerCase(), "base16");
|
||||
|
||||
const signer = didJwt.SimpleSigner(privateKeyHex);
|
||||
const signer = SimpleSigner(privateKeyHex);
|
||||
|
||||
const nowEpoch = Math.floor(Date.now() / 1000);
|
||||
const endEpoch = nowEpoch + 60; // add one minute
|
||||
@@ -138,17 +98,14 @@ export const accessToken = async (identifier: IIdentifier) => {
|
||||
};
|
||||
|
||||
export const sign = async (privateKeyHex: string) => {
|
||||
//const input = privateKeyHex.startsWith("0x")
|
||||
// ? privateKeyHex.substring(2)
|
||||
// : privateKeyHex;
|
||||
// const privateKeyBytes = u8a.fromString(input.toLowerCase(), "base16");
|
||||
|
||||
const signer = didJwt.SimpleSigner(privateKeyHex);
|
||||
const signer = SimpleSigner(privateKeyHex);
|
||||
|
||||
return signer;
|
||||
};
|
||||
|
||||
/**
|
||||
* Copied out of did-jwt since it's deprecated in that library.
|
||||
*
|
||||
* The SimpleSigner returns a configured function for signing data.
|
||||
*
|
||||
* @example
|
||||
@@ -160,10 +117,34 @@ export const sign = async (privateKeyHex: string) => {
|
||||
* @param {String} hexPrivateKey a hex encoded private key
|
||||
* @return {Function} a configured signer function
|
||||
*/
|
||||
export const SimpleSigner = async (hexPrivateKey: string): Promise<Signer> => {
|
||||
const signer = didJwt.ES256KSigner(hexToBytes(hexPrivateKey), true);
|
||||
export function SimpleSigner(hexPrivateKey: string): didJwt.Signer {
|
||||
const signer = didJwt.ES256KSigner(didJwt.hexToBytes(hexPrivateKey), true);
|
||||
return async (data) => {
|
||||
const signature = (await signer(data)) as string;
|
||||
return fromJose(signature);
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
// from did-jwt/util; see SimpleSigner above
|
||||
export function fromJose(signature: string): {
|
||||
r: string;
|
||||
s: string;
|
||||
recoveryParam?: number;
|
||||
} {
|
||||
const signatureBytes: Uint8Array = didJwt.base64ToBytes(signature);
|
||||
if (signatureBytes.length < 64 || signatureBytes.length > 65) {
|
||||
throw new TypeError(
|
||||
`Wrong size for signature. Expected 64 or 65 bytes, but got ${signatureBytes.length}`
|
||||
);
|
||||
}
|
||||
const r = bytesToHex(signatureBytes.slice(0, 32));
|
||||
const s = bytesToHex(signatureBytes.slice(32, 64));
|
||||
const recoveryParam =
|
||||
signatureBytes.length === 65 ? signatureBytes[64] : undefined;
|
||||
return { r, s, recoveryParam };
|
||||
}
|
||||
|
||||
// from did-jwt/util; see SimpleSigner above
|
||||
export function bytesToHex(b: Uint8Array): string {
|
||||
return u8a.toString(b, "base16");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user