@ -50,6 +50,208 @@ const expectedErrorRegexp = /^TypeError: size must be a number >= 0$/;
} ) ;
} ) ;
{
const buf = Buffer . alloc ( 10 ) ;
const before = buf . toString ( 'hex' ) ;
const after = crypto . randomFillSync ( buf ) . toString ( 'hex' ) ;
assert . notStrictEqual ( before , after ) ;
}
{
const buf = new Uint8Array ( new Array ( 10 ) . fill ( 0 ) ) ;
const before = Buffer . from ( buf ) . toString ( 'hex' ) ;
crypto . randomFillSync ( buf ) ;
const after = Buffer . from ( buf ) . toString ( 'hex' ) ;
assert . notStrictEqual ( before , after ) ;
}
{
const buf = Buffer . alloc ( 10 ) ;
const before = buf . toString ( 'hex' ) ;
crypto . randomFill ( buf , common . mustCall ( ( err , buf ) => {
assert . ifError ( err ) ;
const after = buf . toString ( 'hex' ) ;
assert . notStrictEqual ( before , after ) ;
} ) ) ;
}
{
const buf = new Uint8Array ( new Array ( 10 ) . fill ( 0 ) ) ;
const before = Buffer . from ( buf ) . toString ( 'hex' ) ;
crypto . randomFill ( buf , common . mustCall ( ( err , buf ) => {
assert . ifError ( err ) ;
const after = Buffer . from ( buf ) . toString ( 'hex' ) ;
assert . notStrictEqual ( before , after ) ;
} ) ) ;
}
{
const buf = Buffer . alloc ( 10 ) ;
const before = buf . toString ( 'hex' ) ;
crypto . randomFillSync ( buf , 5 , 5 ) ;
const after = buf . toString ( 'hex' ) ;
assert . notStrictEqual ( before , after ) ;
assert . deepStrictEqual ( before . slice ( 0 , 5 ) , after . slice ( 0 , 5 ) ) ;
}
{
const buf = new Uint8Array ( new Array ( 10 ) . fill ( 0 ) ) ;
const before = Buffer . from ( buf ) . toString ( 'hex' ) ;
crypto . randomFillSync ( buf , 5 , 5 ) ;
const after = Buffer . from ( buf ) . toString ( 'hex' ) ;
assert . notStrictEqual ( before , after ) ;
assert . deepStrictEqual ( before . slice ( 0 , 5 ) , after . slice ( 0 , 5 ) ) ;
}
{
const buf = Buffer . alloc ( 10 ) ;
const before = buf . toString ( 'hex' ) ;
crypto . randomFillSync ( buf , 5 ) ;
const after = buf . toString ( 'hex' ) ;
assert . notStrictEqual ( before , after ) ;
assert . deepStrictEqual ( before . slice ( 0 , 5 ) , after . slice ( 0 , 5 ) ) ;
}
{
const buf = Buffer . alloc ( 10 ) ;
const before = buf . toString ( 'hex' ) ;
crypto . randomFill ( buf , 5 , 5 , common . mustCall ( ( err , buf ) => {
assert . ifError ( err ) ;
const after = buf . toString ( 'hex' ) ;
assert . notStrictEqual ( before , after ) ;
assert . deepStrictEqual ( before . slice ( 0 , 5 ) , after . slice ( 0 , 5 ) ) ;
} ) ) ;
}
{
const buf = new Uint8Array ( new Array ( 10 ) . fill ( 0 ) ) ;
const before = Buffer . from ( buf ) . toString ( 'hex' ) ;
crypto . randomFill ( buf , 5 , 5 , common . mustCall ( ( err , buf ) => {
assert . ifError ( err ) ;
const after = Buffer . from ( buf ) . toString ( 'hex' ) ;
assert . notStrictEqual ( before , after ) ;
assert . deepStrictEqual ( before . slice ( 0 , 5 ) , after . slice ( 0 , 5 ) ) ;
} ) ) ;
}
{
const bufs = [
Buffer . alloc ( 10 ) ,
new Uint8Array ( new Array ( 10 ) . fill ( 0 ) )
] ;
for ( const buf of bufs ) {
const len = Buffer . byteLength ( buf ) ;
assert . strictEqual ( len , 10 , ` Expected byteLength of 10, got ${ len } ` ) ;
assert . throws ( ( ) => {
crypto . randomFillSync ( buf , 'test' ) ;
} , /offset must be a number/ ) ;
assert . throws ( ( ) => {
crypto . randomFillSync ( buf , NaN ) ;
} , /offset must be a number/ ) ;
assert . throws ( ( ) => {
crypto . randomFill ( buf , 'test' , common . noop ) ;
} , /offset must be a number/ ) ;
assert . throws ( ( ) => {
crypto . randomFill ( buf , NaN , common . noop ) ;
} , /offset must be a number/ ) ;
const max = require ( 'buffer' ) . kMaxLength + 1 ;
assert . throws ( ( ) => {
crypto . randomFillSync ( buf , 11 ) ;
} , /offset out of range/ ) ;
assert . throws ( ( ) => {
crypto . randomFillSync ( buf , max ) ;
} , /offset out of range/ ) ;
assert . throws ( ( ) => {
crypto . randomFill ( buf , 11 , common . noop ) ;
} , /offset out of range/ ) ;
assert . throws ( ( ) => {
crypto . randomFill ( buf , max , common . noop ) ;
} , /offset out of range/ ) ;
assert . throws ( ( ) => {
crypto . randomFillSync ( buf , 0 , 'test' ) ;
} , /size must be a number/ ) ;
assert . throws ( ( ) => {
crypto . randomFillSync ( buf , 0 , NaN ) ;
} , /size must be a number/ ) ;
assert . throws ( ( ) => {
crypto . randomFill ( buf , 0 , 'test' , common . noop ) ;
} , /size must be a number/ ) ;
assert . throws ( ( ) => {
crypto . randomFill ( buf , 0 , NaN , common . noop ) ;
} , /size must be a number/ ) ;
{
const size = ( - 1 >>> 0 ) + 1 ;
assert . throws ( ( ) => {
crypto . randomFillSync ( buf , 0 , - 10 ) ;
} , /size must be a uint32/ ) ;
assert . throws ( ( ) => {
crypto . randomFillSync ( buf , 0 , size ) ;
} , /size must be a uint32/ ) ;
assert . throws ( ( ) => {
crypto . randomFill ( buf , 0 , - 10 , common . noop ) ;
} , /size must be a uint32/ ) ;
assert . throws ( ( ) => {
crypto . randomFill ( buf , 0 , size , common . noop ) ;
} , /size must be a uint32/ ) ;
}
assert . throws ( ( ) => {
crypto . randomFillSync ( buf , - 10 ) ;
} , /offset must be a uint32/ ) ;
assert . throws ( ( ) => {
crypto . randomFill ( buf , - 10 , common . noop ) ;
} , /offset must be a uint32/ ) ;
assert . throws ( ( ) => {
crypto . randomFillSync ( buf , 1 , 10 ) ;
} , /buffer too small/ ) ;
assert . throws ( ( ) => {
crypto . randomFill ( buf , 1 , 10 , common . noop ) ;
} , /buffer too small/ ) ;
assert . throws ( ( ) => {
crypto . randomFillSync ( buf , 0 , 12 ) ;
} , /buffer too small/ ) ;
assert . throws ( ( ) => {
crypto . randomFill ( buf , 0 , 12 , common . noop ) ;
} , /buffer too small/ ) ;
{
// Offset is too big
const offset = ( - 1 >>> 0 ) + 1 ;
assert . throws ( ( ) => {
crypto . randomFillSync ( buf , offset , 10 ) ;
} , /offset must be a uint32/ ) ;
assert . throws ( ( ) => {
crypto . randomFill ( buf , offset , 10 , common . noop ) ;
} , /offset must be a uint32/ ) ;
}
}
}
// #5126, "FATAL ERROR: v8::Object::SetIndexedPropertiesToExternalArrayData()
// length exceeds max acceptable value"
assert . throws ( function ( ) {