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