|  |  |  | import { randomBytes } from 'crypto'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const g = global as any; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Because curve wrapper will populate this
 | 
					
						
							|  |  |  | g.Internal = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Because curve wrapper uses 'Module' to get at curve-provided functionality
 | 
					
						
							|  |  |  | // tslint:disable-next-line
 | 
					
						
							|  |  |  | g.Module = require('../../js/curve/curve25519_compiled'); | 
					
						
							|  |  |  | // tslint:disable-next-line
 | 
					
						
							|  |  |  | require('../../js/curve/curve25519_wrapper'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export type BinaryType = Uint8Array | Buffer; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | interface CurveType { | 
					
						
							|  |  |  |   keyPair: ( | 
					
						
							|  |  |  |     privateKey: BinaryType | 
					
						
							|  |  |  |   ) => { | 
					
						
							|  |  |  |     pubKey: BinaryType; | 
					
						
							|  |  |  |     privKey: BinaryType; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  |   sign: (privateKey: BinaryType, message: BinaryType) => BinaryType; | 
					
						
							|  |  |  |   verify: (publicKey: BinaryType, message: BinaryType, signature: BinaryType) => boolean; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const { keyPair: internalKeyPair, sign: internalSign, verify: internalVerify } = g.Internal | 
					
						
							|  |  |  |   .curve25519 as CurveType; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function keyPair() { | 
					
						
							|  |  |  |   const privateKey = randomBytes(32); | 
					
						
							|  |  |  |   const { pubKey, privKey } = internalKeyPair(privateKey); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return { | 
					
						
							|  |  |  |     publicKey: pubKey, | 
					
						
							|  |  |  |     privateKey: privKey, | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function sign(privateKey: BinaryType, message: BinaryType) { | 
					
						
							|  |  |  |   return internalSign(privateKey, message); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function verify(publicKey: BinaryType, message: BinaryType, signature: BinaryType) { | 
					
						
							|  |  |  |   const failed = internalVerify(publicKey, message, signature); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return !failed; | 
					
						
							|  |  |  | } |