mirror of
https://github.com/oceanprotocol-archive/squid-js.git
synced 2024-02-02 15:31:51 +01:00
validate proof upto crypto lib
This commit is contained in:
parent
752787528e
commit
a15c655420
@ -6,6 +6,8 @@ interface IAuthentication {
|
|||||||
|
|
||||||
export default class Authentication {
|
export default class Authentication {
|
||||||
|
|
||||||
|
public static TYPE_RSA = "RsaVerificationKey2018"
|
||||||
|
|
||||||
public publicKeyId: string
|
public publicKeyId: string
|
||||||
public type: string
|
public type: string
|
||||||
public value: string
|
public value: string
|
||||||
|
@ -6,6 +6,8 @@ import Service from "./Service"
|
|||||||
|
|
||||||
import * as Web3 from "web3"
|
import * as Web3 from "web3"
|
||||||
|
|
||||||
|
//const crypto = require('crypto')
|
||||||
|
|
||||||
interface IDDO {
|
interface IDDO {
|
||||||
id: string
|
id: string
|
||||||
created?: string
|
created?: string
|
||||||
@ -18,6 +20,12 @@ interface IDDO {
|
|||||||
|
|
||||||
export default class DDO {
|
export default class DDO {
|
||||||
|
|
||||||
|
public static validateSignature(text: string, keyValue: string, signature: string, authenticationType: string) {
|
||||||
|
if ( authenticationType === Authentication.TYPE_RSA ) {
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
public static CONTEXT: string = "https://w3id.org/future-method/v1"
|
public static CONTEXT: string = "https://w3id.org/future-method/v1"
|
||||||
public context: string = DDO.CONTEXT
|
public context: string = DDO.CONTEXT
|
||||||
public did: string
|
public did: string
|
||||||
@ -219,7 +227,55 @@ export default class DDO {
|
|||||||
const values = this.hashTextList()
|
const values = this.hashTextList()
|
||||||
return Web3.utils.sha3(values.join())
|
return Web3.utils.sha3(values.join())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public getPublicKey(keyId: string): PublicKey {
|
||||||
|
const result = {publicKey: null }
|
||||||
|
this.publicKeys.forEach(function(publicKey) {
|
||||||
|
if ( publicKey.did === keyId ) {
|
||||||
|
this.publicKey = publicKey
|
||||||
|
}
|
||||||
|
}, result)
|
||||||
|
return result.publicKey
|
||||||
|
}
|
||||||
|
|
||||||
|
public getAuthentication(publicKeyId: string): Authentication {
|
||||||
|
const result = {authentication: null }
|
||||||
|
this.authentications.forEach(function(authentication) {
|
||||||
|
if ( authentication.publicKeyId === publicKeyId ) {
|
||||||
|
this.authentication = authentication
|
||||||
|
}
|
||||||
|
}, result)
|
||||||
|
return result.authentication
|
||||||
|
}
|
||||||
|
|
||||||
|
public validateFromKey(keyId: string, signatureText: string, signatureValue: string): boolean {
|
||||||
|
const publicKey = this.getPublicKey(keyId)
|
||||||
|
if ( ! publicKey) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
console.log(publicKey)
|
||||||
|
const keyValue = publicKey.decodeValue()
|
||||||
|
console.log(keyValue)
|
||||||
|
|
||||||
|
const authentication = this.getAuthentication(publicKey.did)
|
||||||
|
|
||||||
|
return DDO.validateSignature(signatureText, keyValue, signatureValue, authentication.type)
|
||||||
|
}
|
||||||
|
|
||||||
|
public validateProof(signatureText?: string): boolean {
|
||||||
|
if ( signatureText == null ) {
|
||||||
|
signatureText = this.hashTextList().join()
|
||||||
|
}
|
||||||
|
if ( !this.isProofDefined() ) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if ( !this.proof.isValid() ) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
const signature = new Buffer(this.proof.signatureValue, "base64")
|
||||||
|
return this.validateFromKey(this.proof.creator, signatureText, signature.toString("ascii"))
|
||||||
|
}
|
||||||
|
|
||||||
public isEmpty(): boolean {
|
public isEmpty(): boolean {
|
||||||
return this.did && this.did.length === 0
|
return this.did && this.did.length === 0
|
||||||
&& this.publicKeys.length === 0
|
&& this.publicKeys.length === 0
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
|
|
||||||
|
import * as Web3 from "web3"
|
||||||
|
|
||||||
interface IPublicKey {
|
interface IPublicKey {
|
||||||
id?: string
|
id?: string
|
||||||
owner?: string
|
owner?: string
|
||||||
@ -42,4 +44,28 @@ export default class PublicKey {
|
|||||||
&& this.value && this.value.length > 0
|
&& this.value && this.value.length > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public decodeValue(): string {
|
||||||
|
var value = this.value
|
||||||
|
var buffer
|
||||||
|
switch(this.type) {
|
||||||
|
case PublicKey.PEM:
|
||||||
|
value = this.value
|
||||||
|
break;
|
||||||
|
case PublicKey.JWK:
|
||||||
|
// TODO: implement
|
||||||
|
break;
|
||||||
|
case PublicKey.HEX:
|
||||||
|
value = Web3.utils.hexToAscii(this.value)
|
||||||
|
break;
|
||||||
|
case PublicKey.BASE64:
|
||||||
|
buffer = new Buffer(this.value, 'base64')
|
||||||
|
value = buffer.toString('ascii')
|
||||||
|
break;
|
||||||
|
case PublicKey.BASE85:
|
||||||
|
buffer = new Buffer(this.value, 'base85')
|
||||||
|
value = buffer.toString('ascii')
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -109,4 +109,13 @@ describe("libDDO", () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('DDO validate proof', () => {
|
||||||
|
it("should have a valid ddo proof", async () => {
|
||||||
|
var ddo = new DDO(jsonDDO)
|
||||||
|
assert(ddo)
|
||||||
|
assert(ddo.validate())
|
||||||
|
assert(ddo.validateProof())
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user