Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 24x 1x 23x 23x 23x 23x 23x 23x 23x 23x 23x | import {getCurve} from './curves'
import {KeyType} from '../'
/**
* Recover public key from signature and recovery id.
* @internal
*/
export function recover(signature: Uint8Array, message: Uint8Array, type: string) {
if (type === KeyType.WA) {
throw new Error(`can't recover webauthn public keys, please use @wharfkit/webauthn.`)
}
const curve = getCurve(type)
const recid = signature[0] - 31
const r = signature.subarray(1, 33)
const s = signature.subarray(33, 33 + 32)
const recoveredSig = new Uint8Array(65)
recoveredSig[0] = recid
recoveredSig.set(r, 1)
recoveredSig.set(s, 33)
return curve.recoverPublicKey(recoveredSig, message, {prehash: false})
}
|