module X25519::Provider::Ref10
Public Class Methods
scalarmult(p1, p2)
click to toggle source
Variable-base scalar multiplication
static VALUE mX25519_Provider_Ref10_scalarmult(VALUE self, VALUE scalar, VALUE montgomery_u) { X25519_KEY product; StringValue(scalar); if(RSTRING_LEN(scalar) != X25519_KEYSIZE_BYTES) { rb_raise( rb_eArgError, "expected %d-byte scalar, got %ld", X25519_KEYSIZE_BYTES, RSTRING_LEN(scalar) ); } StringValue(montgomery_u); if(RSTRING_LEN(montgomery_u) != X25519_KEYSIZE_BYTES) { rb_raise( rb_eArgError, "expected %d-byte Montgomery-u coordinate, got %ld", X25519_KEYSIZE_BYTES, RSTRING_LEN(montgomery_u) ); } x25519_ref10_scalarmult( product, (const uint8_t *)RSTRING_PTR(scalar), (const uint8_t *)RSTRING_PTR(montgomery_u) ); return rb_str_new((const char *)product, X25519_KEYSIZE_BYTES); }
scalarmult_base(p1)
click to toggle source
Fixed-base scalar multiplication
static VALUE mX25519_Provider_Ref10_scalarmult_base(VALUE self, VALUE scalar) { X25519_KEY product; StringValue(scalar); if(RSTRING_LEN(scalar) != X25519_KEYSIZE_BYTES) { rb_raise( rb_eArgError, "expected %d-byte scalar, got %ld", X25519_KEYSIZE_BYTES, RSTRING_LEN(scalar) ); } x25519_ref10_scalarmult_base( product, (const uint8_t *)RSTRING_PTR(scalar) ); return rb_str_new((const char *)product, X25519_KEYSIZE_BYTES); }