Example #1
0
void
xs_curve25519_dh(xsMachine *the)
{
	void *secret, *basepoint;

	xsResult = xsArrayBuffer(NULL, C25519_EXPONENT_SIZE);
	secret = xsToArrayBuffer(xsArg(0));
	if (xsToInteger(xsArgc) > 1) {
		if (xsGetArrayBufferLength(xsArg(1)) != 32)
			xsRangeError("bad arg");
		basepoint = xsToArrayBuffer(xsArg(1));
	}
	else
		basepoint = (void *)c25519_base_x;
	c25519_prepare(secret);
	c25519_smult(xsToArrayBuffer(xsResult), basepoint, secret);
}
Example #2
0
void
xs_curve25519_dh(xsMachine *the)
{
	void *secret, *basepoint;
	xsIntegerValue sz;

	xsResult = xsNew1(xsGlobal, xsID("Chunk"), xsInteger(32));
	getChunkData(the, &xsArg(0), &secret, &sz);
	if (sz != 32)
		cryptThrowFSK(kFskErrInvalidParameter);
	if (xsToInteger(xsArgc) > 1) {
		getChunkData(the, &xsArg(1), &basepoint, &sz);
		if (sz != 32)
			cryptThrowFSK(kFskErrInvalidParameter);
	}
	else
		basepoint = (void *)c25519_base_x;
	c25519_prepare(secret);
	c25519_smult(xsGetHostData(xsResult), basepoint, secret);
}