Ruby: ext/openssl/ossl_bn.c File Reference

Ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c52d4d35cc6a173c89eda98ceffa2dcf)

Macros | Functions | Variables
ossl_bn.c File Reference
`#include "ossl.h"`

Go to the source code of this file.

## Macros
#define | NewBN(klass) TypedData_Wrap_Struct((klass), &ossl_bn_type, 0)
#define | SetBN(obj, bn)
#define | GetBN(obj, bn)
#define | BIGNUM_BOOL1(func)
#define | BIGNUM_1c(func)
#define | BIGNUM_2(func)
#define | BIGNUM_2c(func)
#define | BIGNUM_3c(func)
#define | BIGNUM_BIT(func)
#define | BIGNUM_SHIFT(func)
#define | BIGNUM_SELF_SHIFT(func)
#define | BIGNUM_RAND(func)
#define | BIGNUM_RAND_RANGE(func)
#define | BIGNUM_NUM(func)
#define | BIGNUM_CMP(func)

## Functions
VALUE | ossl_bn_new (const BIGNUM *bn)
BIGNUM * | ossl_bn_value_ptr (volatile VALUE *ptr)
BN_CTX * | ossl_bn_ctx_get (void)
void | ossl_bn_ctx_free (void)
| BIGNUM_1c (sqr)
| BIGNUM_3c (mod_add)
void | Init_ossl_bn (void)

## Variables
VALUE | cBN
VALUE | eBNError

## Macro Definition Documentation

## ◆ BIGNUM_1c

#define BIGNUM_1c | ( |  | func | ) |

Value:
static VALUE \
ossl_bn_##func(VALUE self) \
{ \
BIGNUM *bn, *result; \
VALUE obj; \
GetBN(self, bn); \
obj = NewBN(rb_obj_class(self)); \
if (!(result = BN_new())) { \
ossl_raise(eBNError, NULL); \
} \
if (BN_##func(result, bn, ossl_bn_ctx) <= 0) { \
BN_free(result); \
ossl_raise(eBNError, NULL); \
} \
SetBN(obj, result); \
return obj; \
}
rb_obj_class
VALUE rb_obj_class(VALUE)
Definition: object.c:245
eBNError
VALUE eBNError
Definition: ossl_bn.c:56
NewBN
#define NewBN(klass)
Definition: ossl_bn.c:17
ossl_bn_ctx
#define ossl_bn_ctx
Definition: ossl_bn.h:17
NULL
#define NULL
Definition: regenc.h:69
VALUE
unsigned long VALUE
Definition: value.h:38

Definition at line 445 of file ossl_bn.c.

## ◆ BIGNUM_2

#define BIGNUM_2 | ( |  | func | ) |

Value:
static VALUE \
ossl_bn_##func(VALUE self, VALUE other) \
{ \
BIGNUM *bn1, *bn2 = GetBNPtr(other), *result; \
VALUE obj; \
GetBN(self, bn1); \
obj = NewBN(rb_obj_class(self)); \
if (!(result = BN_new())) { \
ossl_raise(eBNError, NULL); \
} \
if (BN_##func(result, bn1, bn2) <= 0) { \
BN_free(result); \
ossl_raise(eBNError, NULL); \
} \
SetBN(obj, result); \
return obj; \
}
GetBNPtr
#define GetBNPtr(obj)
Definition: ossl_bn.h:19

## ◆ BIGNUM_2c

#define BIGNUM_2c | ( |  | func | ) |

Value:
static VALUE \
ossl_bn_##func(VALUE self, VALUE other) \
{ \
BIGNUM *bn1, *bn2 = GetBNPtr(other), *result; \
VALUE obj; \
GetBN(self, bn1); \
obj = NewBN(rb_obj_class(self)); \
if (!(result = BN_new())) { \
ossl_raise(eBNError, NULL); \
} \
if (BN_##func(result, bn1, bn2, ossl_bn_ctx) <= 0) { \
BN_free(result); \
ossl_raise(eBNError, NULL); \
} \
SetBN(obj, result); \
return obj; \
}

## ◆ BIGNUM_3c

#define BIGNUM_3c | ( |  | func | ) |

Value:
static VALUE \
ossl_bn_##func(VALUE self, VALUE other1, VALUE other2) \
{ \
BIGNUM *bn1, *bn2 = GetBNPtr(other1); \
BIGNUM *bn3 = GetBNPtr(other2), *result; \
VALUE obj; \
GetBN(self, bn1); \
obj = NewBN(rb_obj_class(self)); \
if (!(result = BN_new())) { \
ossl_raise(eBNError, NULL); \
} \
if (BN_##func(result, bn1, bn2, bn3, ossl_bn_ctx) <= 0) { \
BN_free(result); \
ossl_raise(eBNError, NULL); \
} \
SetBN(obj, result); \
return obj; \
}

Definition at line 610 of file ossl_bn.c.

## ◆ BIGNUM_BIT

#define BIGNUM_BIT | ( |  | func | ) |

Value:
static VALUE \
ossl_bn_##func(VALUE self, VALUE bit) \
{ \
BIGNUM *bn; \
GetBN(self, bn); \
if (BN_##func(bn, NUM2INT(bit)) <= 0) { \
ossl_raise(eBNError, NULL); \
} \
return self; \
}
NUM2INT
#define NUM2INT
Definition: int.h:44

## ◆ BIGNUM_BOOL1

#define BIGNUM_BOOL1 | ( |  | func | ) |

Value:
static VALUE \
ossl_bn_##func(VALUE self) \
{ \
BIGNUM *bn; \
GetBN(self, bn); \
if (BN_##func(bn)) { \
return Qtrue; \
} \
return Qfalse; \
}
Qtrue
#define Qtrue
Definition: special_consts.h:52
Qfalse
#define Qfalse
Definition: special_consts.h:50

Definition at line 397 of file ossl_bn.c.

## ◆ BIGNUM_CMP

#define BIGNUM_CMP | ( |  | func | ) |

Value:
static VALUE \
ossl_bn_##func(VALUE self, VALUE other) \
{ \
BIGNUM *bn1, *bn2 = GetBNPtr(other); \
GetBN(self, bn1); \
return INT2NUM(BN_##func(bn1, bn2)); \
}
INT2NUM
#define INT2NUM
Definition: int.h:43

Definition at line 963 of file ossl_bn.c.

## ◆ BIGNUM_NUM

#define BIGNUM_NUM | ( |  | func | ) |

Value:
static VALUE \
ossl_bn_##func(VALUE self) \
{ \
BIGNUM *bn; \
GetBN(self, bn); \
return INT2NUM(BN_##func(bn)); \
}

Definition at line 891 of file ossl_bn.c.

## ◆ BIGNUM_RAND

#define BIGNUM_RAND | ( |  | func | ) |

Value:
static VALUE \
ossl_bn_s_##func(int argc, VALUE *argv, VALUE klass) \
{ \
BIGNUM *result; \
int bottom = 0, top = 0, b; \
VALUE bits, fill, odd, obj; \
\
switch (rb_scan_args(argc, argv, "12", &bits, &fill, &odd)) { \
case 3: \
bottom = (odd == Qtrue) ? 1 : 0; \
/* FALLTHROUGH */ \
case 2: \
top = NUM2INT(fill); \
} \
b = NUM2INT(bits); \
obj = NewBN(klass); \
if (!(result = BN_new())) { \
ossl_raise(eBNError, NULL); \
} \
if (BN_##func(result, b, top, bottom) <= 0) { \
BN_free(result); \
ossl_raise(eBNError, NULL); \
} \
SetBN(obj, result); \
return obj; \
}
bits
int bits(struct state *s, int need)
Definition: blast.c:72
rb_scan_args
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
Definition: class.c:2296
top
unsigned int top
Definition: nkf.c:4323
argc
int argc
Definition: ruby.c:240
argv
char ** argv
Definition: ruby.c:241

Definition at line 773 of file ossl_bn.c.

## ◆ BIGNUM_RAND_RANGE

#define BIGNUM_RAND_RANGE | ( |  | func | ) |

Value:
static VALUE \
ossl_bn_s_##func##_range(VALUE klass, VALUE range) \
{ \
BIGNUM *bn = GetBNPtr(range), *result; \
VALUE obj = NewBN(klass); \
if (!(result = BN_new())) { \
ossl_raise(eBNError, NULL); \
} \
if (BN_##func##_range(result, bn) <= 0) { \
BN_free(result); \
ossl_raise(eBNError, NULL); \
} \
SetBN(obj, result); \
return obj; \
}
range
#define range(low, item, hi)
Definition: date_strftime.c:21

Definition at line 813 of file ossl_bn.c.

## ◆ BIGNUM_SELF_SHIFT

#define BIGNUM_SELF_SHIFT | ( |  | func | ) |

Value:
static VALUE \
ossl_bn_self_##func(VALUE self, VALUE bits) \
{ \
BIGNUM *bn; \
int b; \
b = NUM2INT(bits); \
GetBN(self, bn); \
if (BN_##func(bn, bn, b) <= 0) \
ossl_raise(eBNError, NULL); \
return self; \
}

Definition at line 746 of file ossl_bn.c.

## ◆ BIGNUM_SHIFT

#define BIGNUM_SHIFT | ( |  | func | ) |

Value:
static VALUE \
ossl_bn_##func(VALUE self, VALUE bits) \
{ \
BIGNUM *bn, *result; \
int b; \
VALUE obj; \
b = NUM2INT(bits); \
GetBN(self, bn); \
obj = NewBN(rb_obj_class(self)); \
if (!(result = BN_new())) { \
ossl_raise(eBNError, NULL); \
} \
if (BN_##func(result, bn, b) <= 0) { \
BN_free(result); \
ossl_raise(eBNError, NULL); \
} \
SetBN(obj, result); \
return obj; \
}

Definition at line 711 of file ossl_bn.c.

## ◆ GetBN

#define GetBN | ( |  | obj,
|  |  | bn
| ) |  |

Value:
do { \
TypedData_Get_Struct((obj), BIGNUM, &ossl_bn_type, (bn)); \
if (!(bn)) { \
ossl_raise(rb_eRuntimeError, "BN wasn't initialized!"); \
} \
} while (0)
rb_eRuntimeError
VALUE rb_eRuntimeError
Definition: error.c:1055

Definition at line 26 of file ossl_bn.c.

## ◆ NewBN

#define NewBN | ( |  | klass | ) | TypedData_Wrap_Struct((klass), &ossl_bn_type, 0)

Definition at line 17 of file ossl_bn.c.

## ◆ SetBN

#define SetBN | ( |  | obj,
|  |  | bn
| ) |  |

Value:
do { \
if (!(bn)) { \
ossl_raise(rb_eRuntimeError, "BN wasn't initialized!"); \
} \
RTYPEDDATA_DATA(obj) = (bn); \
} while (0)

Definition at line 19 of file ossl_bn.c.

## Function Documentation

## ◆ BIGNUM_1c()

BIGNUM_1c | ( | sqr |  | ) |

Definition at line 469 of file ossl_bn.c.

References eBNError, GetBN, GetBNPtr, NewBN, NULL, ossl_bn_ctx, ossl_raise(), rb_obj_class(), and SetBN.

## ◆ BIGNUM_3c()

BIGNUM_3c | ( | mod_add |  | ) |

Definition at line 635 of file ossl_bn.c.

References GetBN, NUM2INT, Qfalse, and Qtrue.

## ◆ Init_ossl_bn()

void Init_ossl_bn | ( | void |  | ) |

Definition at line 1148 of file ossl_bn.c.

References cBN, eBNError, eOSSLError, mOSSL, ossl_bn_ctx_get(), rb_cObject, rb_define_alias(), rb_define_alloc_func(), rb_define_class_under(), rb_define_method, rb_define_module(), rb_define_singleton_method, rb_eStandardError, and rb_ractor_local_storage_ptr_newkey().

Referenced by Init_openssl().

## ◆ ossl_bn_ctx_free()

void ossl_bn_ctx_free | ( | void |  | ) |

Definition at line 203 of file ossl_bn.c.

References NULL.

## ◆ ossl_bn_ctx_get()

BN_CTX * ossl_bn_ctx_get | ( | void |  | ) |

Definition at line 192 of file ossl_bn.c.

References NULL, ossl_raise(), and rb_eRuntimeError.

Referenced by Init_ossl_bn().

## ◆ ossl_bn_new()

VALUE ossl_bn_new | ( | const BIGNUM * | bn | ) |

Definition at line 62 of file ossl_bn.c.

References cBN, eBNError, NewBN, NULL, ossl_raise(), and SetBN.

Referenced by asn1integer_to_num().

## ◆ ossl_bn_value_ptr()

BIGNUM * ossl_bn_value_ptr | ( | volatile VALUE * | ptr | ) |

Definition at line 140 of file ossl_bn.c.

References GetBN, NIL_P, ossl_raise(), ptr, and rb_eTypeError.

## Variable Documentation

## ◆ cBN

VALUE cBN

Definition at line 50 of file ossl_bn.c.

Referenced by Init_ossl_bn(), and ossl_bn_new().

## ◆ eBNError

VALUE eBNError

Definition at line 56 of file ossl_bn.c.

Referenced by BIGNUM_1c(), Init_ossl_bn(), and ossl_bn_new().