VerifiableSwift
示例
要运行示例项目,请克隆存储库,然后首先从 Example 目录运行 pod install
需求
安装
VerifiableSwift 通过 CocoaPods 提供。要安装,请简单地在您的 Podfile 中添加以下行
pod 'VerifiableSwift'
用法
签名证书
创建并签名证书
// Load did info
let did = "did:meta:000000000000000000000000000000000000000000000000000000000000054b"
let keyId = "did:meta:000000000000000000000000000000000000000000000000000000000000054b#ManagementKey#cfd31afff25b2260ea15ef59f2d5d7dfe8c13511"
let privateKey = ...
// Create credential
let vc = try VerifiableCredential.init()
vc.id = "http://aa.metadium.com/credential/343"
vc.addTypes(types: ["NameCredential"])
vc.issuer = did
vc.issuanceDate = Date()
vc.expirationDate = Date() + 365*24*60*60
vc.credentialSubject = ["id": "did:meta:0000000000000000000000000000000000000000000000000000000000012530", "name": "mansud"]
// Signing credential to JSON web token
let signer = ECDSASigner.init(privateKey: privateKey)
let signedVC = try vc.sign(kid: keyId, nonce: "nonce", signer: signer)
// Serialize signed vc
let serializedVC = try signedVC.serialize()
签名演示
创建并签名演示
// Load did info
let did = "did:meta:0000000000000000000000000000000000000000000000000000000000012530"
let keyId = "did:meta:0000000000000000000000000000000000000000000000000000000000012530#ManagementKey#c82bd0c7893c267821b7d727c9583c88337aa32d"
let privateKey = ...
// Create presentation
let vp = try VerifiablePresentation.init()
vp.id = "http://aa.metadium.com/pres/fff"
vp.holder = did
vp.addTypes(types: ["NamePresentation"])
vp.addVerifiableCredential(verifiableCredential: serializedVC as Any)
// Signing credential to JSON web token
let signedVP = try vp.sign(kid: "did:meta:43894835", nonce: "vp nonce", signer: signer)
// Serialize signed vp
let serializedVP = try signedVP.serialize()
在演示中添加发行和过期日期
// Add expiration date
let jwt = JWT.init()
jwt.notBeforeTime = Date()
jwt.expirationTime = Date() + 365*24*60*60
// Signing credential to JSON web token
let signedVP = try vp.sign(kid: "did:meta:43894835", nonce: "vp nonce", signer: signer, baseClaims: jwt)
验证证书
验证从颁发者收到的证书。
// public key of issuer
let publicKey = ...
// credential recevied from issuer
let serializedVC = ...
// verify serialized vc
let verifier = ECDSAVerifier.init(publicKey: publicKey)
let jws = try JWSObject.init(string: serializedVC)
guard try jws.verify(verifier: verifier) else {
return
}
// Check expiration
let verifiedVC = try VerifiableCredential.init(jws: jws)
if verifiedVC.expirationDate != nil && verifiedVC.expirationDate! < Date() {
return
}
// Get claim
let nameClaim = verifiedVC.credentialSubject as! [String: Any])["name"] as? String
验证演示
验证从持有者收到的演示
// public key of holder
let publicKey = ...
// presentation recevied from holder
let serializedVP = ...
// Verify serialized vp
let verifier = ECDSAVerifier.init(publicKey: publicKey)
let vpJws = try JWSObject.init(string: serializedVP)
guard try vpJws.verify(verifier: verifier) else {
XCTAssert(false)
return
}
// Check expiration
let vpJwt = try JWT.init(jsonData: vpJws.payload)
if vpJwt.expirationTime != nil && vpJwt.expirationTime! < Date() {
XCTAssert(false)
return
}
// Get credentials
let verifiedVp = try VerifiablePresentation.init(jws: vpJws)
let credentials = verifiedVp.verifiableCredentials()!
作者
许可证
VerifiableSwift采用MIT许可证。有关更多信息,请参阅LICENSE文件。