import { Account } from '../src/account'; import { Claim, RevocationType } from '../src/claim/claim'; import { Address, PrivateKey } from '../src/crypto'; import { Identity } from '../src/identity'; import { WebsocketClient } from '../src/network/websocket/websocketClient'; import { buildRegisterMixbeeidTx } from '../src/smartcontract/nativevm/mixbeeidContractTxBuilder'; import { signTransaction } from '../src/transaction/transactionBuilder'; describe('test claim', () => { const restUrl = 'http://polaris1.ont.io:20334'; const privateKey = PrivateKey.random(); const publicKey = privateKey.getPublicKey(); const account = Account.create(privateKey, '123456', ''); const identity = Identity.create(privateKey, '123456', ''); const mixbeeid = identity.mixbeeid; const address = account.address; const publicKeyId = mixbeeid + '#keys-1'; const adminPrivateKey = new PrivateKey('7c47df9664e7db85c1308c080f398400cb24283f5d922e76b478b5429e821b97'); const adminAddress = new Address('AdLUBSSHUuFaak9j169hiamXUmPuCTnaRz'); let serialized: string; let signed: string; /** * Registers new MBC ID to create transaction with Events and new block */ beforeAll(async () => { const tx = buildRegisterMixbeeidTx(mixbeeid, publicKey, '500', '30000'); tx.payer = adminAddress; signTransaction(tx, adminPrivateKey); const client = new WebsocketClient(); await client.sendRawTransaction(tx.serialize(), false, true); }, 10000); test('test serialization', () => { const claim = new Claim({ messageId: '1', issuer: mixbeeid, subject: mixbeeid, issuedAt: 1525800823 }, undefined, false); claim.version = '0.7.0'; claim.context = 'https://example.com/template/v1'; claim.content = { Name: 'Bob Dylan', Age: '22' }; claim.revocation = { type: RevocationType.AttestContract, addr: '8055b362904715fd84536e754868f4c8d27ca3f6' }; serialized = claim.serialize(); expect(serialized).toBeDefined(); }); test('test deserialization', async () => { const msg = Claim.deserialize(serialized); expect(msg.metadata.messageId).toEqual('1'); expect(msg.metadata.issuer).toEqual(mixbeeid); expect(msg.metadata.subject).toEqual(mixbeeid); expect(msg.metadata.issuedAt).toEqual(1525800823); expect(msg.signature).toBeUndefined(); expect(msg.version).toEqual('0.7.0'); expect(msg.context).toEqual('https://example.com/template/v1'); expect(msg.content.Name).toEqual('Bob Dylan'); expect(msg.content.Age).toEqual('22'); expect(msg.revocation.type).toEqual(RevocationType.AttestContract); expect(msg.revocation.addr).toEqual('8055b362904715fd84536e754868f4c8d27ca3f6'); expect(msg.revocation.url).toBeUndefined(); }); test('test signature', async () => { const claim = new Claim({ messageId: '1', issuer: mixbeeid, subject: mixbeeid, issuedAt: 1525800823 }, undefined, false); claim.version = '0.7.0'; claim.context = 'https://example.com/template/v1'; claim.content = { Name: 'Bob Dylan', Age: '22' }; claim.revocation = { type: RevocationType.AttestContract, addr: '8055b362904715fd84536e754868f4c8d27ca3f6' }; await claim.sign(restUrl, publicKeyId, privateKey); signed = claim.serialize(); expect(claim.signature).toBeDefined(); }); test('test verify', async () => { const msg = Claim.deserialize(signed); const result = await msg.verify(restUrl, false); expect(result).toBeTruthy(); }); test('test verify with missing attest', async () => { const msg = Claim.deserialize(signed); const result = await msg.verify(restUrl, true); expect(result).toBeFalsy(); }); });