Trent Larson
2 months ago
13 changed files with 204 additions and 78 deletions
@ -0,0 +1,46 @@ |
|||||
|
/** |
||||
|
* This did:ethr resolver instructs the did-jwt machinery to use the |
||||
|
* EcdsaSecp256k1RecoveryMethod2020Uses verification method which adds the recovery bit to the |
||||
|
* signature to recover the DID's public key from a signature. |
||||
|
* |
||||
|
* This effectively hard codes the did:ethr DID resolver to use the address as the public key. |
||||
|
* @param did : string |
||||
|
* @returns {Promise<DIDResolutionResult>} |
||||
|
* |
||||
|
* Similar code resides in image-api |
||||
|
*/ |
||||
|
export const didEthLocalResolver = async (did: string) => { |
||||
|
const didRegex = /^did:ethr:(0x[0-9a-fA-F]{40})$/; |
||||
|
const match = did.match(didRegex); |
||||
|
|
||||
|
if (match) { |
||||
|
const address = match[1]; // Extract eth address: 0x...
|
||||
|
const publicKeyHex = address; // Use the address directly as a public key placeholder
|
||||
|
|
||||
|
return { |
||||
|
didDocumentMetadata: {}, |
||||
|
didResolutionMetadata: { |
||||
|
contentType: "application/did+ld+json", |
||||
|
}, |
||||
|
didDocument: { |
||||
|
"@context": [ |
||||
|
"https://www.w3.org/ns/did/v1", |
||||
|
"https://w3id.org/security/suites/secp256k1recovery-2020/v2", |
||||
|
], |
||||
|
id: did, |
||||
|
verificationMethod: [ |
||||
|
{ |
||||
|
id: `${did}#controller`, |
||||
|
type: "EcdsaSec256k1RecoveryMethod2020", |
||||
|
controller: did, |
||||
|
blockchainAccountId: "eip155:1:" + publicKeyHex, |
||||
|
}, |
||||
|
], |
||||
|
authentication: [`${did}#controller`], |
||||
|
assertionMethod: [`${did}#controller`], |
||||
|
}, |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
throw new Error(`Unsupported DID format: ${did}`); |
||||
|
}; |
@ -0,0 +1,11 @@ |
|||||
|
export function urlBase64ToUint8Array(base64String: string): Uint8Array { |
||||
|
const padding = "=".repeat((4 - (base64String.length % 4)) % 4); |
||||
|
const base64 = (base64String + padding).replace(/-/g, "+").replace(/_/g, "/"); |
||||
|
const rawData = window.atob(base64); |
||||
|
const outputArray = new Uint8Array(rawData.length); |
||||
|
|
||||
|
for (let i = 0; i < rawData.length; ++i) { |
||||
|
outputArray[i] = rawData.charCodeAt(i); |
||||
|
} |
||||
|
return outputArray; |
||||
|
} |
Loading…
Reference in new issue