VerifiableSwift 版本 0.2.3

VerifiableSwift 版本 0.2.3

YoungBae JeonjinsikhanseongbinLeeCoinplugRelease维护。



VerifiableSwift 版本 0.2.3

  • 作者
  • YoungBae Jeon

VerifiableSwift

CI Status Version License Platform

示例

要运行示例项目,请克隆存储库,然后首先从 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()!

作者

[email protected]

许可证

VerifiableSwift采用MIT许可证。有关更多信息,请参阅LICENSE文件。