Skip to content

Instantly share code, notes, and snippets.

@ender503
Last active April 5, 2020 03:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ender503/ecd884b07190adb79f01b0d515c3b5a3 to your computer and use it in GitHub Desktop.
Save ender503/ecd884b07190adb79f01b0d515c3b5a3 to your computer and use it in GitHub Desktop.
TangleID Javascript Example
/**
* Versions
* node.js: v10.16.0
* @tangleid/core package: ^1.2.0
*/
const { composeAPI } = require('@tangleid/core');
const publicKeyPem = `-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAol+0LrzQ4+Z128AsTIsE
k+7+NRttp97tYP5jF1oqMShYfuqmYkde2p2V99Wp4c1/m0SX31t6/XkokXAClC/F
3LDQj4cYkR16wW/ff5hi4J19KxQN35ANeRMcNLphCjZqTm6YmCOVfptjIIM3a7fx
Y+cVacnjNMf9KKmQYaq6dUNv4aOM6m+7kyVZlCf+ZoQWQ3290vXi70Mq9RHQeoKL
2lW1acAKfhGkolvyAJmPbgWIy/IJBfQJ0inaJV+fbzqujsGY41s8RaZ9clkRQcJm
p5Boc+etklaFEd4wdB5PPUyW5EQw1lq2dUIyDi4ZmgfBdGuzMT5mfq1v+nGU930Q
OwIDAQAB
-----END PUBLIC KEY-----
`;
const privateKeyPem = `-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAol+0LrzQ4+Z128AsTIsEk+7+NRttp97tYP5jF1oqMShYfuqm
Ykde2p2V99Wp4c1/m0SX31t6/XkokXAClC/F3LDQj4cYkR16wW/ff5hi4J19KxQN
35ANeRMcNLphCjZqTm6YmCOVfptjIIM3a7fxY+cVacnjNMf9KKmQYaq6dUNv4aOM
6m+7kyVZlCf+ZoQWQ3290vXi70Mq9RHQeoKL2lW1acAKfhGkolvyAJmPbgWIy/IJ
BfQJ0inaJV+fbzqujsGY41s8RaZ9clkRQcJmp5Boc+etklaFEd4wdB5PPUyW5EQw
1lq2dUIyDi4ZmgfBdGuzMT5mfq1v+nGU930QOwIDAQABAoIBAQCfruThLdl0txlj
ImuuXu0Cmv+utKmzdL4YLDTBK2/g5h+ZuSQl9LBo6J8qmxq1sMX0qZF+HFYo3rUx
ymkO2KiKb+y7qg1T8RzfDSlML03WPatx6Qf3u5A0aMHNbRmv1HHZblRtElmbqC7l
M4YWTlB7gi+B2QSzzJXAHnmaQy+Zz0Ysu6WK3OjS+xqmxdx26crt99QEYukcxJXY
ybZk+ya4Cg0uqqeYfmXcqiOzkpwSYwYB7Ak9oVxlFIcK85TOPyc1w9nJ0k7ANqFZ
Wpqu0poVTkMVlgofD3BP9KiWZxBGyyVSoBM3noeMY3BsGK/1EcQGQLcuqMdwlQ4B
fL0b+GZJAoGBAM+oWG5WNBmIH8fRBfwJ0+QhcvgW/VWbbyWAf/jZ5xaVZCPfKh1s
hpLN6JOBMnQ1RXcHkRTqfhibiInELh1f7fUuKcGHg+6U2DWYJZpqekKjjvtBXgSy
yXJoBX0mFM6dqHcs5QA+beEheXhCQwpw2Un1/s2toOX+YdyYKqUZOeeVAoGBAMgs
m4gdAd6JhcmNtxkA384SMNUOs0EgL3JTn6X1Z02FSYED0u5c4WBD0V+MI8c4vOwI
gaeKSAeZD5GL6O2wo5D7eDCopbwH8DEDazQKvfV0w/1r8+BXixLRGhr3UlOX7wkY
u26zdcmcNK6Ipda7Qt7gkyQrzFjySjkP7SrNVOSPAoGATtSalXBWIOcjIWjBO9fD
P5RPH80iaNAz1mm8qwyVhGY7+L4sL7VWNP7D7tMaAzGB6FjQA7+tFMxefeYil3Ym
UHAw284FEJoipd3XUJJhTVDn44wCFAiHHs5MXyEIvxLstCkv2fLZJaDeiv+kkZ8b
bc9b5lqmfQkfv21oqvozmC0CgYEAtdRnV2XaC9ZqE+LJ/klgAuVdPDvFMpRU5Qn3
DB51vuIjGbFqiiEOjI4uAxfebBoq6lDzzUd8FILBtJkddcOtYIY88B5RphKj6THM
0JItaWium2XTOubqqqYMi5A7VTm+5Ul1AKK9jOx6okv4MK0bmi7vGb07O1SjfV/t
NKMdyRsCgYAbFQFmB3lODA2HJyCKU5P8cz2QQXy3wdNWuytv1PkrqoTe8VNOFaS1
nNtwlXNgKrFKUD97mgFLhrDQpCBDviKYlHdp0qk3ZOFlWzm2oEgp9B5R+DiFaw7P
n0dhBJHaUkwDRjJ2KPbeOUSSI/KEokBJ7vIqQfkC2dZZuvFHi2aV1A==
-----END RSA PRIVATE KEY-----
`;
const generateSeed = (length = 81) => {
const charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ9';
let buffer = '';
for (let i = 0; i < length; i++) {
buffer += charset.charAt(Math.floor(Math.random() * charset.length));
}
return buffer;
};
const main = async () => {
const tid = composeAPI({
providers: {
'0x1': 'https://nodes.devnet.iota.org:443',
},
});
const seed = generateSeed();
console.log('seed', seed);
const { document } = await tid.registerIdentifier('0x1', seed, [publicKeyPem]);
// @ts-ignore
const publicKey = document.publicKey[0];
console.log(document);
const credential = {
'@context': ['https://www.w3.org/2018/credentials/v1', 'http://schema.org'],
id: 'http://example.edu/credentials/58473',
type: ['VerifiableCredential', 'AlumniCredential'],
credentialSubject: {
id: 'did:tangle:5i1WeTSiRnsUBwj3DGLxHzENfryPxKUzkMES98S57LLAauY2NF5dx17yPke9PaoVYY9Qhh47J',
alumniOf: 'Example University',
},
};
const credentialSigned = await tid.signRsaSignature(credential, publicKey, privateKeyPem);
console.log(credentialSigned);
const verified = await tid.verifyRsaSignature(credentialSigned);
console.log('verified', verified);
};
main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment