@aptos-labs/siwa
Version:
Library of utilities for Sign in with Aptos
9 lines (7 loc) • 7.81 kB
JavaScript
import{AccountAddress as P,AccountPublicKey as M}from"@aptos-labs/ts-sdk";import{sha3_256 as B}from"@noble/hashes/sha3";import{AptosConfig as k,Network as v}from"@aptos-labs/ts-sdk";import{Aptos as R}from"@aptos-labs/ts-sdk";function S(e,t,n){if(e===t)return!0;let i=e.length;if(i!==t.length)return!1;for(let r=0;r<i;r++)if(!n?.includes(e[r])&&e[r]!==t[r])return!1;return!0}function h(e){let t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n="";for(let i=0;i<e.byteLength;i+=3){let r=0,a=0;for(let u=0;u<3&&i+u<e.byteLength;u++)r=r<<8|e[i+u],a+=8;for(let u=0;u<4;u++)a>=6?(n+=t[r>>a-6&63],a-=6):a>0&&(n+=t[r<<6-a&63],a=0)}return n}async function _(e,t){try{return await e()}catch{return t}}var c=new R(new k({network:v.MAINNET}));async function A(e,t={}){return e.publicKey.verifySignatureAsync({aptosConfig:t.aptos?.config??c.config,message:e.signingMessage,signature:e.signature})}function V(e){let t=`${e.domain} wants you to sign in with your Aptos account:
`;t+=`${e.address}`,e.statement&&(t+=`
${e.statement}`);let n=[];if(e.uri&&n.push(`URI: ${e.uri}`),e.version&&n.push(`Version: ${e.version}`),e.nonce&&n.push(`Nonce: ${e.nonce}`),e.issuedAt&&n.push(`Issued At: ${e.issuedAt}`),e.expirationTime&&n.push(`Expiration Time: ${e.expirationTime}`),e.notBefore&&n.push(`Not Before: ${e.notBefore}`),e.requestId&&n.push(`Request ID: ${e.requestId}`),e.chainId&&n.push(`Chain ID: ${e.chainId}`),e.resources){n.push("Resources:");for(let i of e.resources)n.push(`- ${i}`)}return n.length&&(t+=`
${n.join(`
`)}`),t}function O(e){let n=B("SIGN_IN_WITH_APTOS::");return new Uint8Array([...n,...new TextEncoder().encode(e)])}var U="(?<domain>[^\\n]+?) wants you to sign in with your Aptos account:\\n",D="(?<address>[^\\n]+)(?:\\n|$)",N="(?:\\n(?<statement>[\\S\\s]*?)(?:\\n|$))??",z="(?:\\nURI: (?<uri>[^\\n]+))?",q="(?:\\nVersion: (?<version>[^\\n]+))?",F="(?:\\nNonce: (?<nonce>[^\\n]+))?",H="(?:\\nIssued At: (?<issuedAt>[^\\n]+))?",C="(?:\\nExpiration Time: (?<expirationTime>[^\\n]+))?",j="(?:\\nNot Before: (?<notBefore>[^\\n]+))?",L="(?:\\nRequest ID: (?<requestId>[^\\n]+))?",W="(?:\\nChain ID: (?<chainId>[^\\n]+))?",G="(?:\\nResources:(?<resources>(?:\\n- [^\\n]+)*))?",Q=`${z}${q}${F}${H}${C}${j}${L}${W}${G}`,X=new RegExp(`^${U}${D}${N}${Q}\\n*$`);function ae(e){let t=X.exec(e);if(!t)return{valid:!1,errors:["invalid_message"]};let n=t.groups;if(!n)return{valid:!1,errors:["invalid_message"]};let i=[];return(!n.domain||n.domain==="undefined")&&i.push("message_domain_missing"),(!n.address||n.address==="undefined")&&i.push("message_address_missing"),(!n.version||n.version==="undefined")&&i.push("message_version_missing"),(!n.chainId||n.chainId==="undefined")&&i.push("message_chain_id_missing"),i.length?{valid:!1,errors:i}:{valid:!0,data:{domain:n.domain,address:n.address,statement:n.statement,uri:n.uri,version:n.version,nonce:n.nonce,chainId:n.chainId,issuedAt:n.issuedAt,expirationTime:n.expirationTime,notBefore:n.notBefore,requestId:n.requestId,resources:n.resources?.split(`
- `).slice(1)}}}async function ue(e,t={}){let{expected:n,input:i,publicKey:r}=e;if(!(r instanceof M))return{valid:!1,errors:["invalid_public_key"]};let a=i.address,u=await _(async()=>(await(t.aptos??c).getAccountInfo({accountAddress:a})).authentication_key,a),$=r.authKey().derivedAddress();if(!P.from(u,{maxMissingChars:63}).equals($))return{valid:!1,errors:["invalid_auth_key"]};let s=[];n.domain&&n.domain!==i.domain&&s.push("message_domain_mismatch"),n.address&&n.address!==i.address&&s.push("message_address_mismatch"),n.statement!==i.statement&&s.push("message_statement_mismatch"),n.uri&&n.uri!==i.uri&&s.push("message_uri_mismatch"),n.version&&n.version!==i.version&&s.push("message_version_mismatch"),n.chainId&&n.chainId!==i.chainId&&s.push("message_chain_id_mismatch"),n.nonce!==i.nonce&&s.push("message_nonce_mismatch"),n.issuedAt!==i.issuedAt&&s.push("message_issued_at_mismatch"),n.expirationTime!==i.expirationTime&&s.push("message_expiration_time_mismatch"),n.notBefore!==i.notBefore&&s.push("message_not_before_mismatch"),n.requestId!==i.requestId&&s.push("message_request_id_mismatch"),n.resources?i.resources?S(n.resources,i.resources,t?.excludedResources)||s.push("message_resources_mismatch"):s.push("message_resources_missing"):i.resources&&s.push("message_resources_unexpected");let I=new Date;return n.expirationTime&&I.getTime()>=new Date(n.expirationTime).getTime()&&s.push("message_expired"),n.notBefore&&I.getTime()<new Date(n.notBefore).getTime()&&s.push("message_not_yet_valid"),s.length?{valid:!1,errors:s}:{valid:!0}}async function ce(e,t={}){let n=V(e.input),i=O(n);return await A({publicKey:e.publicKey,signature:e.signature,signingMessage:i},t)?{valid:!0}:{valid:!1,errors:["invalid_signature"]}}import{SigningScheme as o,Ed25519PublicKey as p,MultiEd25519PublicKey as g,AnyPublicKey as d,MultiKey as l,Hex as K,Deserializer as T,Ed25519Signature as x,MultiEd25519Signature as b,AnySignature as w,MultiKeySignature as E}from"@aptos-labs/ts-sdk";var f=e=>e==="ed25519"||e==="multi_ed25519"||e==="single_key"||e==="multi_key";function le(e){if(typeof e=="object"){if(p.isInstance(e))return"ed25519";if(d.isInstance(e))return"single_key";if(l.isInstance(e))return"multi_key";if(e instanceof g)return"multi_ed25519";throw new Error(`Unknown public key type for instance: ${e}`)}switch(e){case o.Ed25519:return"ed25519";case o.MultiEd25519:return"multi_ed25519";case o.SingleKey:return"single_key";case o.MultiKey:return"multi_key";default:throw new Error(`Unknown public key type for signing scheme: ${e}`)}}function m(e,t){let n=new T(K.fromHexInput(t).toUint8Array());if(typeof e!="string")switch(e){case o.Ed25519:return p.deserialize(n);case o.MultiEd25519:return g.deserialize(n);case o.SingleKey:return d.deserialize(n);case o.MultiKey:return l.deserialize(n);default:throw new Error(`Unknown public key type for signing scheme: ${e}`)}switch(e){case"ed25519":return p.deserialize(n);case"multi_ed25519":return g.deserialize(n);case"single_key":return d.deserialize(n);case"multi_key":return l.deserialize(n);default:throw new Error(`Unknown public key type: ${e}`)}}function y(e,t){let n=new T(K.fromHexInput(t).toUint8Array());if(typeof e!="string")switch(e){case o.Ed25519:return x.deserialize(n);case o.MultiEd25519:return b.deserialize(n);case o.SingleKey:return w.deserialize(n);case o.MultiKey:return E.deserialize(n);default:throw new Error(`Unknown signature type for signing scheme: ${e}`)}switch(e){case"ed25519":return x.deserialize(n);case"multi_ed25519":return b.deserialize(n);case"single_key":return w.deserialize(n);case"multi_key":return E.deserialize(n);default:throw new Error(`Unknown signature type: ${e}`)}}function fe(){let e=new Uint8Array(12);return crypto.getRandomValues(e),h(e)}var Z="2",Ie=e=>({version:Z,type:e.type,signature:e.signature.bcsToHex().toString(),input:e.input,publicKey:e.account.publicKey.bcsToHex().toString()}),Se=e=>{let{version:t}=e;if(t==="1"){if(!f(e.type))throw new Error(`Unexpected public key scheme: ${e.type}`);return{version:"1",type:e.type,signature:y(e.type,e.signature),publicKey:m(e.type,e.publicKey),message:e.message}}if(t==="2"){if(!f(e.type))throw new Error(`Unexpected public key scheme: ${e.type}`);return{version:"2",type:e.type,signature:y(e.type,e.signature),input:e.input,publicKey:m(e.type,e.publicKey)}}throw new Error(`Unexpected serialization version: ${t}`)};export{Z as CURRENT_SERIALIZATION_VERSION,V as createSignInMessage,O as createSignInSigningMessage,Se as deserializeSignInOutput,m as deserializeSignInPublicKey,y as deserializeSignInSignature,fe as generateNonce,le as getSignInPublicKeyScheme,f as isValidPublicKeyScheme,ae as parseSignInMessage,Ie as serializeSignInOutput,ue as verifySignInMessage,ce as verifySignInSignature};
//# sourceMappingURL=index.js.map