You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			60 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
		
		
			
		
	
	
			60 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
| 
								 
											7 years ago
										 
									 | 
							
								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;
							 | 
						||
| 
								 | 
							
								}
							 |