Compare commits

...

2 Commits

Author SHA1 Message Date
Jarred Sumner
7be0b7bb1a wip 2024-07-15 14:09:58 -07:00
Jarred Sumner
c8885cb6c2 WIP 2024-07-14 15:21:50 -07:00
7 changed files with 600 additions and 285 deletions

View File

@@ -1356,11 +1356,109 @@ pub const Crypto = struct {
const Hashers = @import("../../sha.zig");
const BoringSSL = bun.BoringSSL;
pub const EVP = struct {
ctx: BoringSSL.EVP_MD_CTX = undefined,
md: *const BoringSSL.EVP_MD = undefined,
algorithm: Algorithm,
pub const Key = struct {
pkey: *BoringSSL.EVP_PKEY,
};
pub fn sign(evp: *EVP, signature_buf: []u8, data: []const u8) ![]u8 {
var out: usize = signature_buf.len;
if (BoringSSL.EVP_DigestSign(&evp.ctx, signature_buf.ptr, &out, data.ptr, data.len) == 0) {
return error.BoringSSLError;
}
return signature_buf[0..out];
}
pub fn verify(evp: *EVP, signature: []const u8, data: []const u8) bool {
return BoringSSL.EVP_DigestVerify(&evp.ctx, signature.ptr, signature.len, data.ptr, data.len) == 1;
}
pub const Sign = struct {
evp: EVP,
pub fn init(this: *Sign, pkey_ctx: ?*BoringSSL.EVP_PKEY_CTX, key: Key) !void {
var pkey_ctx_ = &pkey_ctx;
if (BoringSSL.EVP_DigestSignInit(&this.evp.ctx, if (pkey_ctx == null) null else &pkey_ctx_, this.evp.md, null, key.pkey) == 0) {
return error.BoringSSLError;
}
}
pub fn byName(name: ZigString, global: *JSC.JSGlobalObject) ?EVP.Sign {
const algorithm, const md = EVP.byName(name, global) orelse return null;
return EVP.Sign.init(algorithm, md, global.bunVM().rareData().boringEngine());
}
pub fn update(this: *Sign, data: []const u8) !void {
BoringSSL.ERR_clear_error();
if (BoringSSL.EVP_DigestSignUpdate(&this.evp.ctx, data.ptr, data.len) == 0) {
return error.BoringSSLError;
}
}
pub fn final(this: *Sign, data: []const u8, allocator: std.mem.Allocator) ![]const u8 {
BoringSSL.ERR_clear_error();
var allocation_size: usize = 0;
// TODO: is this right?
if (data.len > 0) {
try this.update(data);
}
if (BoringSSL.EVP_DigestSignFinal(&this.evp.ctx, null, &allocation_size) != 0) {
return error.BoringSSLError;
}
var bytes = try allocator.alloc(u8, allocation_size);
errdefer allocator.free(bytes);
if (BoringSSL.EVP_DigestSignFinal(&this.evp.ctx, bytes.ptr, &bytes.len) != 0) {
return error.BoringSSLError;
}
return bytes;
}
pub fn deinit(this: *Sign) void {
this.evp.deinit();
}
};
pub const Verify = struct {
evp: EVP,
pub fn init(this: *Verify, pkey_ctx: ?*BoringSSL.EVP_PKEY_CTX, key: Key) !void {
var pkey_ctx_ = &pkey_ctx;
if (BoringSSL.EVP_DigestVerifyInit(&this.evp.ctx, &pkey_ctx_, this.evp.md, null, key.pkey) == 0) {
return error.BoringSSLError;
}
}
pub fn update(this: *Verify, data: []const u8) !void {
BoringSSL.ERR_clear_error();
if (BoringSSL.EVP_DigestVerifyUpdate(&this.evp.ctx, data.ptr, data.len) == 0) {
return error.BoringSSLError;
}
}
pub fn final(this: *Verify, signature: []const u8) bool {
BoringSSL.ERR_clear_error();
return BoringSSL.EVP_DigestVerifyFinal(&this.evp.ctx, signature.ptr, signature.len) == 1;
}
pub fn deinit(this: *Verify) void {
this.evp.deinit();
}
};
// we do this to avoid asking BoringSSL what the digest name is
// because that API is confusing
pub const Algorithm = enum {
@@ -1469,7 +1567,7 @@ pub const Crypto = struct {
});
};
pub const Digest = [BoringSSL.EVP_MAX_MD_SIZE]u8;
pub const Bytes = [BoringSSL.EVP_MAX_MD_SIZE]u8;
/// For usage in Zig
pub fn pbkdf2(
@@ -1710,88 +1808,106 @@ pub const Crypto = struct {
}
};
pub fn init(algorithm: Algorithm, md: *const BoringSSL.EVP_MD, engine: *BoringSSL.ENGINE) EVP {
BoringSSL.load();
pub const Digest = struct {
evp: EVP,
pub fn init(algorithm: Algorithm, md: *const BoringSSL.EVP_MD, engine: *BoringSSL.ENGINE) EVP.Digest {
BoringSSL.load();
var ctx: BoringSSL.EVP_MD_CTX = undefined;
BoringSSL.EVP_MD_CTX_init(&ctx);
_ = BoringSSL.EVP_DigestInit_ex(&ctx, md, engine);
return .{
.ctx = ctx,
.md = md,
.algorithm = algorithm,
};
}
pub fn reset(this: *EVP, engine: *BoringSSL.ENGINE) void {
BoringSSL.ERR_clear_error();
_ = BoringSSL.EVP_DigestInit_ex(&this.ctx, this.md, engine);
}
pub fn hash(this: *EVP, engine: *BoringSSL.ENGINE, input: []const u8, output: []u8) ?u32 {
BoringSSL.ERR_clear_error();
var outsize: c_uint = @min(@as(u16, @truncate(output.len)), this.size());
if (BoringSSL.EVP_Digest(input.ptr, input.len, output.ptr, &outsize, this.md, engine) != 1) {
return null;
var ctx: BoringSSL.EVP_MD_CTX = undefined;
BoringSSL.EVP_MD_CTX_init(&ctx);
_ = BoringSSL.EVP_DigestInit_ex(&ctx, md, engine);
return .{
.ctx = ctx,
.md = md,
.algorithm = algorithm,
};
}
return outsize;
}
pub fn byName(name: ZigString, global: *JSC.JSGlobalObject) ?EVP.Digest {
const algorithm, const md = EVP.byName(name, global) orelse return null;
pub fn final(this: *EVP, engine: *BoringSSL.ENGINE, output: []u8) []u8 {
BoringSSL.ERR_clear_error();
var outsize: u32 = @min(@as(u16, @truncate(output.len)), this.size());
if (BoringSSL.EVP_DigestFinal_ex(
&this.ctx,
output.ptr,
&outsize,
) != 1) {
return "";
return EVP.Digest.init(algorithm, md, global.bunVM().rareData().boringEngine());
}
this.reset(engine);
pub fn size(this: *Digest) u16 {
return this.evp.size();
}
return output[0..outsize];
}
pub fn reset(this: *Digest, engine: *BoringSSL.ENGINE) void {
BoringSSL.ERR_clear_error();
_ = BoringSSL.EVP_DigestInit_ex(&this.evp.ctx, this.evp.md, engine);
}
pub fn update(this: *EVP, input: []const u8) void {
BoringSSL.ERR_clear_error();
_ = BoringSSL.EVP_DigestUpdate(&this.ctx, input.ptr, input.len);
pub fn hash(this: *Digest, engine: *BoringSSL.ENGINE, input: []const u8, output: []u8) ?u32 {
BoringSSL.ERR_clear_error();
var outsize: c_uint = @min(@as(u16, @truncate(output.len)), this.size());
if (BoringSSL.EVP_Digest(input.ptr, input.len, output.ptr, &outsize, this.md, engine) != 1) {
return null;
}
return outsize;
}
pub fn final(this: *Digest, engine: *BoringSSL.ENGINE, output: []u8) []u8 {
BoringSSL.ERR_clear_error();
var outsize: u32 = @min(@as(u16, @truncate(output.len)), this.evp.size());
if (BoringSSL.EVP_DigestFinal_ex(
&this.evp.ctx,
output.ptr,
&outsize,
) != 1) {
return "";
}
this.reset(engine);
return output[0..outsize];
}
pub fn update(this: *Digest, input: []const u8) void {
BoringSSL.ERR_clear_error();
_ = BoringSSL.EVP_DigestUpdate(&this.evp.ctx, input.ptr, input.len);
}
pub fn copy(this: *const Digest, engine: *BoringSSL.ENGINE) error{OutOfMemory}!EVP.Digest {
BoringSSL.ERR_clear_error();
var new = init(this.evp.algorithm, this.evp.md, engine);
try this.evp.copy(&new.evp);
return new;
}
pub fn deinit(this: *Digest) void {
this.evp.deinit();
}
};
pub fn copy(this: *const EVP, into: *EVP) error{OutOfMemory}!void {
if (BoringSSL.EVP_MD_CTX_copy_ex(&into.ctx, &this.ctx) == 0) {
return error.OutOfMemory;
}
}
pub fn size(this: *EVP) u16 {
return @as(u16, @truncate(BoringSSL.EVP_MD_CTX_size(&this.ctx)));
}
pub fn copy(this: *const EVP, engine: *BoringSSL.ENGINE) error{OutOfMemory}!EVP {
BoringSSL.ERR_clear_error();
var new = init(this.algorithm, this.md, engine);
if (BoringSSL.EVP_MD_CTX_copy_ex(&new.ctx, &this.ctx) == 0) {
return error.OutOfMemory;
}
return new;
}
fn byName(name: ZigString, global: *JSC.JSGlobalObject) ?.{ Algorithm, *const BoringSSL.EVP_MD } {
var name_str = name.toSlice(global.allocator());
defer name_str.deinit();
pub fn byNameAndEngine(engine: *BoringSSL.ENGINE, name: []const u8) ?EVP {
if (Algorithm.map.getWithEql(name, strings.eqlCaseInsensitiveASCIIIgnoreLength)) |algorithm| {
if (algorithm.md()) |md| {
return EVP.init(algorithm, md, engine);
return .{ algorithm, md };
}
if (BoringSSL.EVP_get_digestbyname(@tagName(algorithm))) |md| {
return EVP.init(algorithm, md, engine);
return .{ algorithm, md };
}
}
return null;
}
pub fn byName(name: ZigString, global: *JSC.JSGlobalObject) ?EVP {
var name_str = name.toSlice(global.allocator());
defer name_str.deinit();
return byNameAndEngine(global.bunVM().rareData().boringEngine(), name_str.slice());
}
pub fn deinit(this: *EVP) void {
// https://github.com/oven-sh/bun/issues/3250
_ = BoringSSL.EVP_MD_CTX_cleanup(&this.ctx);
@@ -2596,10 +2712,10 @@ pub const Crypto = struct {
};
pub const CryptoHasher = union(enum) {
evp: EVP,
evp: EVP.Digest,
zig: CryptoHasherZig,
const Digest = EVP.Digest;
const Bytes = EVP.Bytes;
pub usingnamespace JSC.Codegen.JSCryptoHasher;
usingnamespace bun.New(@This());
@@ -2637,11 +2753,11 @@ pub const Crypto = struct {
fn hashToEncoding(
globalThis: *JSGlobalObject,
evp: *EVP,
evp: *EVP.Digest,
input: JSC.Node.BlobOrStringOrBuffer,
encoding: JSC.Node.Encoding,
) JSC.JSValue {
var output_digest_buf: Digest = undefined;
var output_digest_buf: Bytes = undefined;
defer input.deinit();
if (input == .blob and input.blob.isBunFile()) {
@@ -2661,11 +2777,11 @@ pub const Crypto = struct {
fn hashToBytes(
globalThis: *JSGlobalObject,
evp: *EVP,
evp: *EVP.Digest,
input: JSC.Node.BlobOrStringOrBuffer,
output: ?JSC.ArrayBuffer,
) JSC.JSValue {
var output_digest_buf: Digest = undefined;
var output_digest_buf: Bytes = undefined;
var output_digest_slice: []u8 = &output_digest_buf;
defer input.deinit();
@@ -2706,7 +2822,7 @@ pub const Crypto = struct {
input: JSC.Node.BlobOrStringOrBuffer,
output: ?JSC.Node.StringOrBuffer,
) JSC.JSValue {
var evp = EVP.byName(algorithm, globalThis) orelse return CryptoHasherZig.hashByName(globalThis, algorithm, input, output) orelse {
var evp = EVP.Digest.byName(algorithm, globalThis) orelse return CryptoHasherZig.hashByName(globalThis, algorithm, input, output) orelse {
globalThis.throwInvalidArguments("Unsupported algorithm \"{any}\"", .{algorithm});
return .zero;
};
@@ -2753,7 +2869,7 @@ pub const Crypto = struct {
}
var this: CryptoHasher = undefined;
const evp = EVP.byName(algorithm, globalThis) orelse return CryptoHasherZig.constructor(algorithm) orelse {
const evp = EVP.Digest.byName(algorithm, globalThis) orelse return CryptoHasherZig.constructor(algorithm) orelse {
globalThis.throwInvalidArguments("Unsupported algorithm {any}", .{algorithm});
return null;
};
@@ -2849,7 +2965,7 @@ pub const Crypto = struct {
}
fn digestToBytes(this: *CryptoHasher, globalThis: *JSGlobalObject, output: ?JSC.ArrayBuffer) JSC.JSValue {
var output_digest_buf: EVP.Digest = undefined;
var output_digest_buf: EVP.Bytes = undefined;
var output_digest_slice: []u8 = &output_digest_buf;
if (output) |output_buf| {
var bytes = output_buf.byteSlice();
@@ -2859,7 +2975,7 @@ pub const Crypto = struct {
}
output_digest_slice = bytes[0..bytes.len];
} else {
output_digest_buf = std.mem.zeroes(EVP.Digest);
output_digest_buf = std.mem.zeroes(EVP.Bytes);
}
const result = this.final(globalThis, output_digest_slice);
@@ -2873,7 +2989,7 @@ pub const Crypto = struct {
}
fn digestToEncoding(this: *CryptoHasher, globalThis: *JSGlobalObject, encoding: JSC.Node.Encoding) JSC.JSValue {
var output_digest_buf: EVP.Digest = std.mem.zeroes(EVP.Digest);
var output_digest_buf: EVP.Bytes = std.mem.zeroes(EVP.Bytes);
const output_digest_slice: []u8 = &output_digest_buf;
const out = this.final(globalThis, output_digest_slice);
return encoding.encodeWithMaxSize(globalThis, BoringSSL.EVP_MAX_MD_SIZE, out);
@@ -3038,7 +3154,88 @@ pub const Crypto = struct {
}
};
fn StaticCryptoHasher(comptime Hasher: type, comptime name: [:0]const u8) type {
pub const CryptoSigner = struct {
evp: EVP.Sign,
pub usingnamespace JSC.Codegen.JSCryptoSigner;
pub usingnamespace bun.NewThreadSafeRefCounted(@This(), deinitFn);
pub fn constructor(globalThis: *JSC.JSGlobalObject, callframe: *JSC.CallFrame) ?*CryptoSigner {
const arguments = callframe.arguments(2);
if (arguments.len == 0) {
globalThis.throwInvalidArguments("Expected an algorithm name as an argument", .{});
return null;
}
const algorithm_name = arguments[0];
if (algorithm_name.isEmptyOrUndefinedOrNull() or !algorithm_name.isString()) {
globalThis.throwInvalidArguments("algorithm must be a string", .{});
return null;
}
const algorithm = algorithm_name.getZigString(globalThis);
if (algorithm.len == 0) {
globalThis.throwInvalidArguments("Invalid algorithm name", .{});
return null;
}
const evp = EVP.Sign.byName(algorithm, globalThis) orelse {
globalThis.throwInvalidArguments("Unsupported algorithm {}", .{algorithm});
return null;
};
return CryptoSigner.new(.{
.evp = evp,
});
}
fn deinitFn(this: *CryptoSigner) void {
this.evp.deinit();
this.destroy();
}
pub fn update(this: *CryptoSigner, globalObject: *JSC.JSGlobalObject, callframe: *JSC.CallFrame) JSC.JSValue {
const thisValue = callframe.this();
const arguments = callframe.arguments(2).slice();
const input = if (arguments.len > 0) arguments[0] else {
globalObject.throwNotEnoughArguments("update", 1, 0);
return JSC.JSValue.zero;
};
const encoding_value = if (arguments.len > 1) arguments[1] else JSC.JSValue.undefined;
const buffer: JSC.Node.BlobOrStringOrBuffer = JSC.Node.BlobOrStringOrBuffer.fromJSWithEncodingValue(globalObject, globalObject.bunVM().allocator, input, encoding_value) orelse {
globalObject.throwInvalidArguments("expected blob, string or buffer", .{});
return JSC.JSValue.zero;
};
defer buffer.deinit();
if (buffer == .blob and buffer.blob.isBunFile()) {
globalObject.throw("Bun.file() is not supported here yet (it needs an async version)", .{});
return .zero;
}
this.evp.update(buffer.slice()) catch |err| {
const instance = createCryptoError(globalObject, err);
globalObject.throwValue(instance);
return .zero;
};
return thisValue;
}
pub fn final(this: *CryptoSigner, globalObject: *JSC.JSGlobalObject, callframe: *JSC.CallFrame) JSC.JSValue {
const arguments = callframe.arguments(2).slice();
var signature: JSC.ArrayBuffer = undefined;
const len = this.evp.sign(globalObject.bunVM().rareData().boringEngine(), buffer.slice(), &signature) orelse {
const err = BoringSSL.ERR_get_error();
const instance = createCryptoError(globalObject, err);
BoringSSL.ERR_clear_error();
globalObject.throwValue(instance);
return .zero;
};
_ = len; // autofix
return signature.value;
}
};
pub fn StaticCryptoHasher(comptime Hasher: type, comptime name: [:0]const u8) type {
return struct {
hashing: Hasher = Hasher{},

View File

@@ -111,4 +111,26 @@ export default [
},
},
}),
define({
name: "Sign",
construct: true,
finalize: true,
JSType: "0b11101110",
klass: {
sign: {
fn: "signOneShot",
length: 2,
},
},
proto: {
update: {
fn: "update",
length: 8,
},
sign: {
fn: "finalSign",
length: 8,
},
},
}),
];

14
src/bun.js/api/crypto.zig Normal file
View File

@@ -0,0 +1,14 @@
const bun = @import("root").bun;
const JSC = bun.JSC;
const VirtualMachine = JSC.VirtualMachine;
const JSValue = JSC.JSValue;
const Async = bun.Async;
const Hashers = @import("../../sha.zig");
const JSGlobalObject = JSC.JSGlobalObject;
const std = @import("std");
const ZigString = bun.JSC.ZigString;
const strings = bun.strings;
const assert = bun.assert;
const string = []const u8;
const BoringSSL = bun.BoringSSL;

View File

@@ -0,0 +1,79 @@
const bun = @import("root").bun;
const JSC = bun.JSC;
const VirutalMachine = JSC.VirtualMachine;
const JSValue = JSC.JSValue;
const Async = bun.Async;
const JSGlobalObject = JSC.JSGlobalObject;
const std = @import("std");
const ZigString = bun.JSC.ZigString;
const Crypto = JSC.API.Bun.Crypto;
const BoringSSL = bun.BoringSSL;
const EVP = Crypto;
pub const Sign = struct {
this_value: JSC.JSValue = .zero,
ref: Async.KeepAlive = .{},
evp: EVP,
globalObject: *JSC.JSGlobalObject,
ref_count: std.atomic.Value(u32) = std.atomic.Value(u32).init(1),
pub usingnamespace JSC.Codegen.JSSign;
pub usingnamespace bun.NewThreadSafeRefCounted(@This(), deinitFn);
fn deinitFn(this: *Sign) void {
this.destroy();
}
pub fn signOneShot(globalObject: *JSGlobalObject, callFrame: *JSC.CallFrame) JSC.JSValue {
_ = globalObject;
_ = callFrame;
return .zero;
}
pub fn constructor(globalObject: *JSGlobalObject, callFrame: *JSC.CallFrame) ?*Sign {
const arguments = callFrame.arguments(2).slice();
if (arguments.len < 1 or !arguments[0].isString()) {
globalObject.throwNotEnoughArguments("Sign", 1, 0);
return null;
}
const evp = EVP.byName(arguments[0].getZigString(globalObject), globalObject) orelse {
return null;
};
return Sign.new(.{
.evp = evp,
.globalObject = globalObject,
});
}
pub fn update(this: *Sign, globalThis: *JSC.JSGlobalObject, callframe: *JSC.CallFrame) JSC.JSValue {
const this_value = callframe.this();
this.this_value = this_value;
const arguments = callframe.arguments(3).slice();
if (arguments.len < 1) {
globalThis.throwNotEnoughArguments("Sign.update", 2, 0);
return .zero;
}
const data = arguments[0];
const input_encoding_value: JSC.JSValue = if (arguments.len > 1) arguments[1] else .undefined;
var string_or_buffer = JSC.Node.StringOrBuffer.fromJSWithEncodingValue(globalThis, bun.default_allocator, data, input_encoding_value) orelse return .zero;
defer string_or_buffer.deinit();
this.evp.update(string_or_buffer.slice());
return this_value;
}
pub fn finalSign(this: *Sign, globalThis: *JSC.JSGlobalObject, callframe: *JSC.CallFrame) JSC.JSValue {
_ = this; // autofix
_ = globalThis; // autofix
const arguments = callframe.arguments(8).slice();
BoringSSL.
}
pub fn finalize(this: *Sign) void {
this.deref();
}
};

View File

@@ -75,4 +75,5 @@ pub const Classes = struct {
pub const PostgresSQLQuery = JSC.Postgres.PostgresSQLQuery;
pub const BrotliEncoder = JSC.API.BrotliEncoder;
pub const BrotliDecoder = JSC.API.BrotliDecoder;
pub const Sign = JSC.API.Crypto.Sign;
};

View File

@@ -225,7 +225,7 @@ pub const struct_private_key_st = extern struct {
version: c_int,
enc_algor: [*c]X509_ALGOR,
enc_pkey: [*c]ASN1_OCTET_STRING,
dec_pkey: [*c]EVP_PKEY,
dec_pkey: *EVP_PKEY,
key_length: c_int,
key_data: [*c]u8,
key_free: c_int,
@@ -1103,10 +1103,10 @@ pub extern fn BIO_printf(bio: [*c]BIO, format: [*c]const u8, ...) c_int;
pub extern fn BIO_indent(bio: [*c]BIO, indent: c_uint, max_indent: c_uint) c_int;
pub extern fn BIO_hexdump(bio: [*c]BIO, data: [*c]const u8, len: usize, indent: c_uint) c_int;
pub extern fn ERR_print_errors(bio: [*c]BIO) void;
pub extern fn BIO_read_asn1(bio: [*c]BIO, out: [*c][*c]u8, out_len: [*c]usize, max_len: usize) c_int;
pub extern fn BIO_read_asn1(bio: [*c]BIO, out: [*c][*c]u8, out_len: *usize, max_len: usize) c_int;
pub extern fn BIO_s_mem() ?*const BIO_METHOD;
// pub extern fn BIO_new_mem_buf(buf: ?*const anyopaque, len: ossl_ssize_t) [*c]BIO;
// pub extern fn BIO_mem_contents(bio: [*c]const BIO, out_contents: [*c][*c]const u8, out_len: [*c]usize) c_int;
// pub extern fn BIO_mem_contents(bio: [*c]const BIO, out_contents: [*c][*c]const u8, out_len: *usize) c_int;
pub extern fn BIO_get_mem_data(bio: [*c]BIO, contents: [*c][*c]u8) c_long;
pub extern fn BIO_get_mem_ptr(bio: [*c]BIO, out: [*c][*c]BUF_MEM) c_int;
pub extern fn BIO_set_mem_buf(bio: [*c]BIO, b: [*c]BUF_MEM, take_ownership: c_int) c_int;
@@ -1159,17 +1159,17 @@ pub extern fn BIO_set_shutdown(bio: [*c]BIO, shutdown: c_int) void;
pub extern fn BIO_get_shutdown(bio: [*c]BIO) c_int;
pub extern fn BIO_meth_set_puts(method: [*c]BIO_METHOD, puts: ?*const fn ([*c]BIO, [*c]const u8) callconv(.C) c_int) c_int;
pub extern fn EVP_EncodeBlock(dst: [*c]u8, src: [*c]const u8, src_len: usize) usize;
pub extern fn EVP_EncodedLength(out_len: [*c]usize, len: usize) c_int;
pub extern fn EVP_DecodedLength(out_len: [*c]usize, len: usize) c_int;
pub extern fn EVP_DecodeBase64(out: [*c]u8, out_len: [*c]usize, max_out: usize, in: [*c]const u8, in_len: usize) c_int;
pub extern fn EVP_EncodedLength(out_len: *usize, len: usize) c_int;
pub extern fn EVP_DecodedLength(out_len: *usize, len: usize) c_int;
pub extern fn EVP_DecodeBase64(out: [*]u8, out_len: *usize, max_out: usize, in: [*c]const u8, in_len: usize) c_int;
pub extern fn EVP_ENCODE_CTX_new() [*c]EVP_ENCODE_CTX;
pub extern fn EVP_ENCODE_CTX_free(ctx: [*c]EVP_ENCODE_CTX) void;
pub extern fn EVP_EncodeInit(ctx: [*c]EVP_ENCODE_CTX) void;
pub extern fn EVP_EncodeUpdate(ctx: [*c]EVP_ENCODE_CTX, out: [*c]u8, out_len: [*c]c_int, in: [*c]const u8, in_len: usize) void;
pub extern fn EVP_EncodeFinal(ctx: [*c]EVP_ENCODE_CTX, out: [*c]u8, out_len: [*c]c_int) void;
pub extern fn EVP_EncodeUpdate(ctx: [*c]EVP_ENCODE_CTX, out: [*]u8, out_len: [*c]c_int, in: [*c]const u8, in_len: usize) void;
pub extern fn EVP_EncodeFinal(ctx: [*c]EVP_ENCODE_CTX, out: [*]u8, out_len: [*c]c_int) void;
pub extern fn EVP_DecodeInit(ctx: [*c]EVP_ENCODE_CTX) void;
pub extern fn EVP_DecodeUpdate(ctx: [*c]EVP_ENCODE_CTX, out: [*c]u8, out_len: [*c]c_int, in: [*c]const u8, in_len: usize) c_int;
pub extern fn EVP_DecodeFinal(ctx: [*c]EVP_ENCODE_CTX, out: [*c]u8, out_len: [*c]c_int) c_int;
pub extern fn EVP_DecodeUpdate(ctx: [*c]EVP_ENCODE_CTX, out: [*]u8, out_len: [*c]c_int, in: [*c]const u8, in_len: usize) c_int;
pub extern fn EVP_DecodeFinal(ctx: [*c]EVP_ENCODE_CTX, out: [*]u8, out_len: [*c]c_int) c_int;
pub extern fn EVP_DecodeBlock(dst: [*c]u8, src: [*c]const u8, src_len: usize) c_int;
pub extern fn EVP_rc4() ?*const EVP_CIPHER;
pub extern fn EVP_des_cbc() ?*const EVP_CIPHER;
@@ -1200,12 +1200,12 @@ pub extern fn EVP_CIPHER_CTX_reset(ctx: [*c]EVP_CIPHER_CTX) c_int;
pub extern fn EVP_CipherInit_ex(ctx: [*c]EVP_CIPHER_CTX, cipher: ?*const EVP_CIPHER, engine: ?*ENGINE, key: [*c]const u8, iv: [*c]const u8, enc: c_int) c_int;
pub extern fn EVP_EncryptInit_ex(ctx: [*c]EVP_CIPHER_CTX, cipher: ?*const EVP_CIPHER, impl: ?*ENGINE, key: [*c]const u8, iv: [*c]const u8) c_int;
pub extern fn EVP_DecryptInit_ex(ctx: [*c]EVP_CIPHER_CTX, cipher: ?*const EVP_CIPHER, impl: ?*ENGINE, key: [*c]const u8, iv: [*c]const u8) c_int;
pub extern fn EVP_EncryptUpdate(ctx: [*c]EVP_CIPHER_CTX, out: [*c]u8, out_len: [*c]c_int, in: [*c]const u8, in_len: c_int) c_int;
pub extern fn EVP_EncryptFinal_ex(ctx: [*c]EVP_CIPHER_CTX, out: [*c]u8, out_len: [*c]c_int) c_int;
pub extern fn EVP_DecryptUpdate(ctx: [*c]EVP_CIPHER_CTX, out: [*c]u8, out_len: [*c]c_int, in: [*c]const u8, in_len: c_int) c_int;
pub extern fn EVP_DecryptFinal_ex(ctx: [*c]EVP_CIPHER_CTX, out: [*c]u8, out_len: [*c]c_int) c_int;
pub extern fn EVP_CipherUpdate(ctx: [*c]EVP_CIPHER_CTX, out: [*c]u8, out_len: [*c]c_int, in: [*c]const u8, in_len: c_int) c_int;
pub extern fn EVP_CipherFinal_ex(ctx: [*c]EVP_CIPHER_CTX, out: [*c]u8, out_len: [*c]c_int) c_int;
pub extern fn EVP_EncryptUpdate(ctx: [*c]EVP_CIPHER_CTX, out: [*]u8, out_len: [*c]c_int, in: [*c]const u8, in_len: c_int) c_int;
pub extern fn EVP_EncryptFinal_ex(ctx: [*c]EVP_CIPHER_CTX, out: [*]u8, out_len: [*c]c_int) c_int;
pub extern fn EVP_DecryptUpdate(ctx: [*c]EVP_CIPHER_CTX, out: [*]u8, out_len: [*c]c_int, in: [*c]const u8, in_len: c_int) c_int;
pub extern fn EVP_DecryptFinal_ex(ctx: [*c]EVP_CIPHER_CTX, out: [*]u8, out_len: [*c]c_int) c_int;
pub extern fn EVP_CipherUpdate(ctx: [*c]EVP_CIPHER_CTX, out: [*]u8, out_len: [*c]c_int, in: [*c]const u8, in_len: c_int) c_int;
pub extern fn EVP_CipherFinal_ex(ctx: [*c]EVP_CIPHER_CTX, out: [*]u8, out_len: [*c]c_int) c_int;
pub extern fn EVP_CIPHER_CTX_cipher(ctx: [*c]const EVP_CIPHER_CTX) ?*const EVP_CIPHER;
pub extern fn EVP_CIPHER_CTX_nid(ctx: [*c]const EVP_CIPHER_CTX) c_int;
pub extern fn EVP_CIPHER_CTX_encrypting(ctx: [*c]const EVP_CIPHER_CTX) c_int;
@@ -1225,14 +1225,14 @@ pub extern fn EVP_CIPHER_key_length(cipher: ?*const EVP_CIPHER) c_uint;
pub extern fn EVP_CIPHER_iv_length(cipher: ?*const EVP_CIPHER) c_uint;
pub extern fn EVP_CIPHER_flags(cipher: ?*const EVP_CIPHER) u32;
pub extern fn EVP_CIPHER_mode(cipher: ?*const EVP_CIPHER) u32;
pub extern fn EVP_BytesToKey(@"type": ?*const EVP_CIPHER, md: ?*const EVP_MD, salt: [*c]const u8, data: [*c]const u8, data_len: usize, count: c_uint, key: [*c]u8, iv: [*c]u8) c_int;
pub extern fn EVP_BytesToKey(@"type": ?*const EVP_CIPHER, md: ?*const EVP_MD, salt: [*c]const u8, data: [*]const u8, data_len: usize, count: c_uint, key: [*c]u8, iv: [*c]u8) c_int;
pub extern fn EVP_CipherInit(ctx: [*c]EVP_CIPHER_CTX, cipher: ?*const EVP_CIPHER, key: [*c]const u8, iv: [*c]const u8, enc: c_int) c_int;
pub extern fn EVP_EncryptInit(ctx: [*c]EVP_CIPHER_CTX, cipher: ?*const EVP_CIPHER, key: [*c]const u8, iv: [*c]const u8) c_int;
pub extern fn EVP_DecryptInit(ctx: [*c]EVP_CIPHER_CTX, cipher: ?*const EVP_CIPHER, key: [*c]const u8, iv: [*c]const u8) c_int;
pub extern fn EVP_CipherFinal(ctx: [*c]EVP_CIPHER_CTX, out: [*c]u8, out_len: [*c]c_int) c_int;
pub extern fn EVP_EncryptFinal(ctx: [*c]EVP_CIPHER_CTX, out: [*c]u8, out_len: [*c]c_int) c_int;
pub extern fn EVP_DecryptFinal(ctx: [*c]EVP_CIPHER_CTX, out: [*c]u8, out_len: [*c]c_int) c_int;
pub extern fn EVP_Cipher(ctx: [*c]EVP_CIPHER_CTX, out: [*c]u8, in: [*c]const u8, in_len: usize) c_int;
pub extern fn EVP_CipherFinal(ctx: [*c]EVP_CIPHER_CTX, out: [*]u8, out_len: [*c]c_int) c_int;
pub extern fn EVP_EncryptFinal(ctx: [*c]EVP_CIPHER_CTX, out: [*]u8, out_len: [*c]c_int) c_int;
pub extern fn EVP_DecryptFinal(ctx: [*c]EVP_CIPHER_CTX, out: [*]u8, out_len: [*c]c_int) c_int;
pub extern fn EVP_Cipher(ctx: [*c]EVP_CIPHER_CTX, out: [*]u8, in: [*c]const u8, in_len: usize) c_int;
pub extern fn EVP_add_cipher_alias(a: [*c]const u8, b: [*c]const u8) c_int;
pub extern fn EVP_get_cipherbyname(name: [*c]const u8) ?*const EVP_CIPHER;
pub extern fn EVP_aes_128_gcm() ?*const EVP_CIPHER;
@@ -1267,12 +1267,12 @@ pub extern fn EVP_MD_CTX_free(ctx: [*c]EVP_MD_CTX) void;
pub extern fn EVP_MD_CTX_copy_ex(out: [*c]EVP_MD_CTX, in: [*c]const EVP_MD_CTX) c_int;
pub extern fn EVP_MD_CTX_move(out: [*c]EVP_MD_CTX, in: [*c]EVP_MD_CTX) void;
pub extern fn EVP_MD_CTX_reset(ctx: [*c]EVP_MD_CTX) c_int;
pub extern fn EVP_DigestInit_ex(ctx: [*c]EVP_MD_CTX, @"type": ?*const EVP_MD, engine: ?*ENGINE) c_int;
pub extern fn EVP_DigestInit(ctx: [*c]EVP_MD_CTX, @"type": ?*const EVP_MD) c_int;
pub extern fn EVP_DigestUpdate(ctx: [*c]EVP_MD_CTX, data: ?*const anyopaque, len: usize) c_int;
pub extern fn EVP_DigestFinal_ex(ctx: [*c]EVP_MD_CTX, md_out: [*c]u8, out_size: [*c]c_uint) c_int;
pub extern fn EVP_DigestFinal(ctx: [*c]EVP_MD_CTX, md_out: [*c]u8, out_size: [*c]c_uint) c_int;
pub extern fn EVP_Digest(data: ?*const anyopaque, len: usize, md_out: [*c]u8, md_out_size: [*c]c_uint, @"type": ?*const EVP_MD, impl: ?*ENGINE) c_int;
pub extern fn EVP_DigestInit_ex(ctx: *EVP_MD_CTX, @"type": ?*const EVP_MD, engine: ?*ENGINE) c_int;
pub extern fn EVP_DigestInit(ctx: *EVP_MD_CTX, @"type": ?*const EVP_MD) c_int;
pub extern fn EVP_DigestUpdate(ctx: *EVP_MD_CTX, data: ?*const anyopaque, len: usize) c_int;
pub extern fn EVP_DigestFinal_ex(ctx: *EVP_MD_CTX, md_out: [*]u8, out_size: [*c]c_uint) c_int;
pub extern fn EVP_DigestFinal(ctx: *EVP_MD_CTX, md_out: [*]u8, out_size: [*c]c_uint) c_int;
pub extern fn EVP_Digest(data: ?*const anyopaque, len: usize, md_out: [*]u8, md_out_size: [*c]c_uint, @"type": ?*const EVP_MD, impl: ?*ENGINE) c_int;
pub extern fn EVP_MD_type(md: ?*const EVP_MD) c_int;
pub extern fn EVP_MD_flags(md: ?*const EVP_MD) u32;
pub extern fn EVP_MD_size(md: ?*const EVP_MD) usize;
@@ -1289,7 +1289,7 @@ pub extern fn EVP_get_digestbyname([*c]const u8) ?*const EVP_MD;
pub extern fn EVP_dss1() ?*const EVP_MD;
pub extern fn EVP_MD_CTX_create() [*c]EVP_MD_CTX;
pub extern fn EVP_MD_CTX_destroy(ctx: [*c]EVP_MD_CTX) void;
pub extern fn EVP_DigestFinalXOF(ctx: [*c]EVP_MD_CTX, out: [*c]u8, len: usize) c_int;
pub extern fn EVP_DigestFinalXOF(ctx: [*c]EVP_MD_CTX, out: [*]u8, len: usize) c_int;
pub extern fn EVP_MD_meth_get_flags(md: ?*const EVP_MD) u32;
pub extern fn EVP_MD_CTX_set_flags(ctx: [*c]EVP_MD_CTX, flags: c_int) void;
pub extern fn EVP_MD_nid(md: ?*const EVP_MD) c_int;
@@ -1317,10 +1317,10 @@ pub extern fn EVP_AEAD_CTX_new(aead: ?*const EVP_AEAD, key: [*c]const u8, key_le
pub extern fn EVP_AEAD_CTX_free(ctx: [*c]EVP_AEAD_CTX) void;
pub extern fn EVP_AEAD_CTX_init(ctx: [*c]EVP_AEAD_CTX, aead: ?*const EVP_AEAD, key: [*c]const u8, key_len: usize, tag_len: usize, impl: ?*ENGINE) c_int;
pub extern fn EVP_AEAD_CTX_cleanup(ctx: [*c]EVP_AEAD_CTX) void;
pub extern fn EVP_AEAD_CTX_seal(ctx: [*c]const EVP_AEAD_CTX, out: [*c]u8, out_len: [*c]usize, max_out_len: usize, nonce: [*c]const u8, nonce_len: usize, in: [*c]const u8, in_len: usize, ad: [*c]const u8, ad_len: usize) c_int;
pub extern fn EVP_AEAD_CTX_open(ctx: [*c]const EVP_AEAD_CTX, out: [*c]u8, out_len: [*c]usize, max_out_len: usize, nonce: [*c]const u8, nonce_len: usize, in: [*c]const u8, in_len: usize, ad: [*c]const u8, ad_len: usize) c_int;
pub extern fn EVP_AEAD_CTX_seal_scatter(ctx: [*c]const EVP_AEAD_CTX, out: [*c]u8, out_tag: [*c]u8, out_tag_len: [*c]usize, max_out_tag_len: usize, nonce: [*c]const u8, nonce_len: usize, in: [*c]const u8, in_len: usize, extra_in: [*c]const u8, extra_in_len: usize, ad: [*c]const u8, ad_len: usize) c_int;
pub extern fn EVP_AEAD_CTX_open_gather(ctx: [*c]const EVP_AEAD_CTX, out: [*c]u8, nonce: [*c]const u8, nonce_len: usize, in: [*c]const u8, in_len: usize, in_tag: [*c]const u8, in_tag_len: usize, ad: [*c]const u8, ad_len: usize) c_int;
pub extern fn EVP_AEAD_CTX_seal(ctx: [*c]const EVP_AEAD_CTX, out: [*]u8, out_len: *usize, max_out_len: usize, nonce: [*c]const u8, nonce_len: usize, in: [*c]const u8, in_len: usize, ad: [*c]const u8, ad_len: usize) c_int;
pub extern fn EVP_AEAD_CTX_open(ctx: [*c]const EVP_AEAD_CTX, out: [*]u8, out_len: *usize, max_out_len: usize, nonce: [*c]const u8, nonce_len: usize, in: [*c]const u8, in_len: usize, ad: [*c]const u8, ad_len: usize) c_int;
pub extern fn EVP_AEAD_CTX_seal_scatter(ctx: [*c]const EVP_AEAD_CTX, out: [*]u8, out_tag: [*c]u8, out_tag_len: [*c]usize, max_out_tag_len: usize, nonce: [*c]const u8, nonce_len: usize, in: [*c]const u8, in_len: usize, extra_in: [*c]const u8, extra_in_len: usize, ad: [*c]const u8, ad_len: usize) c_int;
pub extern fn EVP_AEAD_CTX_open_gather(ctx: [*c]const EVP_AEAD_CTX, out: [*]u8, nonce: [*c]const u8, nonce_len: usize, in: [*c]const u8, in_len: usize, in_tag: [*c]const u8, in_tag_len: usize, ad: [*c]const u8, ad_len: usize) c_int;
pub extern fn EVP_AEAD_CTX_aead(ctx: [*c]const EVP_AEAD_CTX) ?*const EVP_AEAD;
pub extern fn EVP_aead_aes_128_cbc_sha1_tls() ?*const EVP_AEAD;
pub extern fn EVP_aead_aes_128_cbc_sha1_tls_implicit_iv() ?*const EVP_AEAD;
@@ -1337,102 +1337,102 @@ pub const evp_aead_open: c_int = 0;
pub const evp_aead_seal: c_int = 1;
pub const enum_evp_aead_direction_t = c_uint;
pub extern fn EVP_AEAD_CTX_init_with_direction(ctx: [*c]EVP_AEAD_CTX, aead: ?*const EVP_AEAD, key: [*c]const u8, key_len: usize, tag_len: usize, dir: enum_evp_aead_direction_t) c_int;
pub extern fn EVP_AEAD_CTX_get_iv(ctx: [*c]const EVP_AEAD_CTX, out_iv: [*c][*c]const u8, out_len: [*c]usize) c_int;
pub extern fn EVP_AEAD_CTX_get_iv(ctx: [*c]const EVP_AEAD_CTX, out_iv: [*c][*c]const u8, out_len: *usize) c_int;
pub extern fn EVP_AEAD_CTX_tag_len(ctx: [*c]const EVP_AEAD_CTX, out_tag_len: [*c]usize, in_len: usize, extra_in_len: usize) c_int;
pub extern fn EVP_PKEY_new() [*c]EVP_PKEY;
pub extern fn EVP_PKEY_free(pkey: [*c]EVP_PKEY) void;
pub extern fn EVP_PKEY_up_ref(pkey: [*c]EVP_PKEY) c_int;
pub extern fn EVP_PKEY_is_opaque(pkey: [*c]const EVP_PKEY) c_int;
pub extern fn EVP_PKEY_cmp(a: [*c]const EVP_PKEY, b: [*c]const EVP_PKEY) c_int;
pub extern fn EVP_PKEY_copy_parameters(to: [*c]EVP_PKEY, from: [*c]const EVP_PKEY) c_int;
pub extern fn EVP_PKEY_missing_parameters(pkey: [*c]const EVP_PKEY) c_int;
pub extern fn EVP_PKEY_size(pkey: [*c]const EVP_PKEY) c_int;
pub extern fn EVP_PKEY_bits(pkey: [*c]const EVP_PKEY) c_int;
pub extern fn EVP_PKEY_id(pkey: [*c]const EVP_PKEY) c_int;
pub extern fn EVP_PKEY_new() ?*EVP_PKEY;
pub extern fn EVP_PKEY_free(pkey: *EVP_PKEY) void;
pub extern fn EVP_PKEY_up_ref(pkey: *EVP_PKEY) c_int;
pub extern fn EVP_PKEY_is_opaque(pkey: *const EVP_PKEY) c_int;
pub extern fn EVP_PKEY_cmp(a: ?*const EVP_PKEY, b: ?*const EVP_PKEY) c_int;
pub extern fn EVP_PKEY_copy_parameters(to: [*c]EVP_PKEY, from: ?*const EVP_PKEY) c_int;
pub extern fn EVP_PKEY_missing_parameters(pkey: *const EVP_PKEY) c_int;
pub extern fn EVP_PKEY_size(pkey: *const EVP_PKEY) c_int;
pub extern fn EVP_PKEY_bits(pkey: *const EVP_PKEY) c_int;
pub extern fn EVP_PKEY_id(pkey: *const EVP_PKEY) c_int;
pub extern fn EVP_PKEY_type(nid: c_int) c_int;
pub extern fn EVP_PKEY_set1_RSA(pkey: [*c]EVP_PKEY, key: ?*RSA) c_int;
pub extern fn EVP_PKEY_assign_RSA(pkey: [*c]EVP_PKEY, key: ?*RSA) c_int;
pub extern fn EVP_PKEY_get0_RSA(pkey: [*c]const EVP_PKEY) ?*RSA;
pub extern fn EVP_PKEY_get1_RSA(pkey: [*c]const EVP_PKEY) ?*RSA;
pub extern fn EVP_PKEY_set1_DSA(pkey: [*c]EVP_PKEY, key: [*c]DSA) c_int;
pub extern fn EVP_PKEY_assign_DSA(pkey: [*c]EVP_PKEY, key: [*c]DSA) c_int;
pub extern fn EVP_PKEY_get0_DSA(pkey: [*c]const EVP_PKEY) [*c]DSA;
pub extern fn EVP_PKEY_get1_DSA(pkey: [*c]const EVP_PKEY) [*c]DSA;
pub extern fn EVP_PKEY_set1_EC_KEY(pkey: [*c]EVP_PKEY, key: ?*EC_KEY) c_int;
pub extern fn EVP_PKEY_assign_EC_KEY(pkey: [*c]EVP_PKEY, key: ?*EC_KEY) c_int;
pub extern fn EVP_PKEY_get0_EC_KEY(pkey: [*c]const EVP_PKEY) ?*EC_KEY;
pub extern fn EVP_PKEY_get1_EC_KEY(pkey: [*c]const EVP_PKEY) ?*EC_KEY;
pub extern fn EVP_PKEY_assign(pkey: [*c]EVP_PKEY, @"type": c_int, key: ?*anyopaque) c_int;
pub extern fn EVP_PKEY_set_type(pkey: [*c]EVP_PKEY, @"type": c_int) c_int;
pub extern fn EVP_PKEY_cmp_parameters(a: [*c]const EVP_PKEY, b: [*c]const EVP_PKEY) c_int;
pub extern fn EVP_PKEY_set1_RSA(pkey: *EVP_PKEY, key: ?*RSA) c_int;
pub extern fn EVP_PKEY_assign_RSA(pkey: *EVP_PKEY, key: ?*RSA) c_int;
pub extern fn EVP_PKEY_get0_RSA(pkey: *const EVP_PKEY) ?*RSA;
pub extern fn EVP_PKEY_get1_RSA(pkey: *const EVP_PKEY) ?*RSA;
pub extern fn EVP_PKEY_set1_DSA(pkey: *EVP_PKEY, key: [*c]DSA) c_int;
pub extern fn EVP_PKEY_assign_DSA(pkey: *EVP_PKEY, key: [*c]DSA) c_int;
pub extern fn EVP_PKEY_get0_DSA(pkey: *const EVP_PKEY) [*c]DSA;
pub extern fn EVP_PKEY_get1_DSA(pkey: *const EVP_PKEY) [*c]DSA;
pub extern fn EVP_PKEY_set1_EC_KEY(pkey: *EVP_PKEY, key: ?*EC_KEY) c_int;
pub extern fn EVP_PKEY_assign_EC_KEY(pkey: *EVP_PKEY, key: ?*EC_KEY) c_int;
pub extern fn EVP_PKEY_get0_EC_KEY(pkey: *const EVP_PKEY) ?*EC_KEY;
pub extern fn EVP_PKEY_get1_EC_KEY(pkey: *const EVP_PKEY) ?*EC_KEY;
pub extern fn EVP_PKEY_assign(pkey: *EVP_PKEY, @"type": c_int, key: ?*anyopaque) c_int;
pub extern fn EVP_PKEY_set_type(pkey: *EVP_PKEY, @"type": c_int) c_int;
pub extern fn EVP_PKEY_cmp_parameters(a: ?*const EVP_PKEY, b: ?*const EVP_PKEY) c_int;
pub extern fn EVP_parse_public_key(cbs: [*c]CBS) [*c]EVP_PKEY;
pub extern fn EVP_marshal_public_key(cbb: ?*CBB, key: [*c]const EVP_PKEY) c_int;
pub extern fn EVP_marshal_public_key(cbb: ?*CBB, key: ?*const EVP_PKEY) c_int;
pub extern fn EVP_parse_private_key(cbs: [*c]CBS) [*c]EVP_PKEY;
pub extern fn EVP_marshal_private_key(cbb: ?*CBB, key: [*c]const EVP_PKEY) c_int;
pub extern fn EVP_marshal_private_key(cbb: ?*CBB, key: ?*const EVP_PKEY) c_int;
pub extern fn EVP_PKEY_new_raw_private_key(@"type": c_int, unused: ?*ENGINE, in: [*c]const u8, len: usize) [*c]EVP_PKEY;
pub extern fn EVP_PKEY_new_raw_public_key(@"type": c_int, unused: ?*ENGINE, in: [*c]const u8, len: usize) [*c]EVP_PKEY;
pub extern fn EVP_PKEY_get_raw_private_key(pkey: [*c]const EVP_PKEY, out: [*c]u8, out_len: [*c]usize) c_int;
pub extern fn EVP_PKEY_get_raw_public_key(pkey: [*c]const EVP_PKEY, out: [*c]u8, out_len: [*c]usize) c_int;
pub extern fn EVP_DigestSignInit(ctx: [*c]EVP_MD_CTX, pctx: [*c]?*EVP_PKEY_CTX, @"type": ?*const EVP_MD, e: ?*ENGINE, pkey: [*c]EVP_PKEY) c_int;
pub extern fn EVP_DigestSignUpdate(ctx: [*c]EVP_MD_CTX, data: ?*const anyopaque, len: usize) c_int;
pub extern fn EVP_DigestSignFinal(ctx: [*c]EVP_MD_CTX, out_sig: [*c]u8, out_sig_len: [*c]usize) c_int;
pub extern fn EVP_DigestSign(ctx: [*c]EVP_MD_CTX, out_sig: [*c]u8, out_sig_len: [*c]usize, data: [*c]const u8, data_len: usize) c_int;
pub extern fn EVP_DigestVerifyInit(ctx: [*c]EVP_MD_CTX, pctx: [*c]?*EVP_PKEY_CTX, @"type": ?*const EVP_MD, e: ?*ENGINE, pkey: [*c]EVP_PKEY) c_int;
pub extern fn EVP_DigestVerifyUpdate(ctx: [*c]EVP_MD_CTX, data: ?*const anyopaque, len: usize) c_int;
pub extern fn EVP_DigestVerifyFinal(ctx: [*c]EVP_MD_CTX, sig: [*c]const u8, sig_len: usize) c_int;
pub extern fn EVP_DigestVerify(ctx: [*c]EVP_MD_CTX, sig: [*c]const u8, sig_len: usize, data: [*c]const u8, len: usize) c_int;
pub extern fn EVP_SignInit_ex(ctx: [*c]EVP_MD_CTX, @"type": ?*const EVP_MD, impl: ?*ENGINE) c_int;
pub extern fn EVP_SignInit(ctx: [*c]EVP_MD_CTX, @"type": ?*const EVP_MD) c_int;
pub extern fn EVP_SignUpdate(ctx: [*c]EVP_MD_CTX, data: ?*const anyopaque, len: usize) c_int;
pub extern fn EVP_SignFinal(ctx: [*c]const EVP_MD_CTX, sig: [*c]u8, out_sig_len: [*c]c_uint, pkey: [*c]EVP_PKEY) c_int;
pub extern fn EVP_VerifyInit_ex(ctx: [*c]EVP_MD_CTX, @"type": ?*const EVP_MD, impl: ?*ENGINE) c_int;
pub extern fn EVP_VerifyInit(ctx: [*c]EVP_MD_CTX, @"type": ?*const EVP_MD) c_int;
pub extern fn EVP_VerifyUpdate(ctx: [*c]EVP_MD_CTX, data: ?*const anyopaque, len: usize) c_int;
pub extern fn EVP_VerifyFinal(ctx: [*c]EVP_MD_CTX, sig: [*c]const u8, sig_len: usize, pkey: [*c]EVP_PKEY) c_int;
pub extern fn EVP_PKEY_print_public(out: [*c]BIO, pkey: [*c]const EVP_PKEY, indent: c_int, pctx: ?*ASN1_PCTX) c_int;
pub extern fn EVP_PKEY_print_private(out: [*c]BIO, pkey: [*c]const EVP_PKEY, indent: c_int, pctx: ?*ASN1_PCTX) c_int;
pub extern fn EVP_PKEY_print_params(out: [*c]BIO, pkey: [*c]const EVP_PKEY, indent: c_int, pctx: ?*ASN1_PCTX) c_int;
pub extern fn EVP_PKEY_get_raw_private_key(pkey: *const EVP_PKEY, out: [*]u8, out_len: *usize) c_int;
pub extern fn EVP_PKEY_get_raw_public_key(pkey: *const EVP_PKEY, out: [*]u8, out_len: *usize) c_int;
pub extern fn EVP_DigestSignInit(ctx: *EVP_MD_CTX, pctx: ?**EVP_PKEY_CTX, @"type": ?*const EVP_MD, e: ?*ENGINE, pkey: *EVP_PKEY) c_int;
pub extern fn EVP_DigestSignUpdate(ctx: *EVP_MD_CTX, data: ?*const anyopaque, len: usize) c_int;
pub extern fn EVP_DigestSignFinal(ctx: *EVP_MD_CTX, out_sig: ?[*]u8, out_sig_len: *usize) c_int;
pub extern fn EVP_DigestSign(ctx: *EVP_MD_CTX, out_sig: ?[*]u8, out_sig_len: *usize, data: [*]const u8, data_len: usize) c_int;
pub extern fn EVP_DigestVerifyInit(ctx: *EVP_MD_CTX, pctx: *?*EVP_PKEY_CTX, @"type": ?*const EVP_MD, e: ?*ENGINE, pkey: *EVP_PKEY) c_int;
pub extern fn EVP_DigestVerifyUpdate(ctx: *EVP_MD_CTX, data: ?*const anyopaque, len: usize) c_int;
pub extern fn EVP_DigestVerifyFinal(ctx: *EVP_MD_CTX, sig: ?[*]const u8, sig_len: usize) c_int;
pub extern fn EVP_DigestVerify(ctx: *EVP_MD_CTX, sig: [*]const u8, sig_len: usize, data: ?[*]const u8, len: usize) c_int;
pub extern fn EVP_SignInit_ex(ctx: *EVP_MD_CTX, @"type": ?*const EVP_MD, impl: ?*ENGINE) c_int;
pub extern fn EVP_SignInit(ctx: *EVP_MD_CTX, @"type": ?*const EVP_MD) c_int;
pub extern fn EVP_SignUpdate(ctx: *EVP_MD_CTX, data: ?*const anyopaque, len: usize) c_int;
pub extern fn EVP_SignFinal(ctx: [*c]const EVP_MD_CTX, sig: [*c]u8, out_sig_len: [*c]c_uint, pkey: *EVP_PKEY) c_int;
pub extern fn EVP_VerifyInit_ex(ctx: *EVP_MD_CTX, @"type": ?*const EVP_MD, impl: ?*ENGINE) c_int;
pub extern fn EVP_VerifyInit(ctx: *EVP_MD_CTX, @"type": ?*const EVP_MD) c_int;
pub extern fn EVP_VerifyUpdate(ctx: *EVP_MD_CTX, data: ?*const anyopaque, len: usize) c_int;
pub extern fn EVP_VerifyFinal(ctx: *EVP_MD_CTX, sig: [*c]const u8, sig_len: usize, pkey: *EVP_PKEY) c_int;
pub extern fn EVP_PKEY_print_public(out: [*c]BIO, pkey: ?*const EVP_PKEY, indent: c_int, pctx: ?*ASN1_PCTX) c_int;
pub extern fn EVP_PKEY_print_private(out: [*c]BIO, pkey: ?*const EVP_PKEY, indent: c_int, pctx: ?*ASN1_PCTX) c_int;
pub extern fn EVP_PKEY_print_params(out: [*c]BIO, pkey: ?*const EVP_PKEY, indent: c_int, pctx: ?*ASN1_PCTX) c_int;
pub extern fn PKCS5_PBKDF2_HMAC(password: ?[*]const u8, password_len: usize, salt: ?[*]const u8, salt_len: usize, iterations: c_uint, digest: ?*const EVP_MD, key_len: usize, out_key: ?[*]u8) c_int;
pub extern fn PKCS5_PBKDF2_HMAC_SHA1(password: [*c]const u8, password_len: usize, salt: [*c]const u8, salt_len: usize, iterations: c_uint, key_len: usize, out_key: [*c]u8) c_int;
pub extern fn EVP_PBE_scrypt(password: [*c]const u8, password_len: usize, salt: [*c]const u8, salt_len: usize, N: u64, r: u64, p: u64, max_mem: usize, out_key: [*c]u8, key_len: usize) c_int;
pub extern fn EVP_PKEY_CTX_new(pkey: [*c]EVP_PKEY, e: ?*ENGINE) ?*EVP_PKEY_CTX;
pub extern fn EVP_PKEY_CTX_new(pkey: *EVP_PKEY, e: ?*ENGINE) ?*EVP_PKEY_CTX;
pub extern fn EVP_PKEY_CTX_new_id(id: c_int, e: ?*ENGINE) ?*EVP_PKEY_CTX;
pub extern fn EVP_PKEY_CTX_free(ctx: ?*EVP_PKEY_CTX) void;
pub extern fn EVP_PKEY_CTX_dup(ctx: ?*EVP_PKEY_CTX) ?*EVP_PKEY_CTX;
pub extern fn EVP_PKEY_CTX_get0_pkey(ctx: ?*EVP_PKEY_CTX) [*c]EVP_PKEY;
pub extern fn EVP_PKEY_sign_init(ctx: ?*EVP_PKEY_CTX) c_int;
pub extern fn EVP_PKEY_sign(ctx: ?*EVP_PKEY_CTX, sig: [*c]u8, sig_len: [*c]usize, digest: [*c]const u8, digest_len: usize) c_int;
pub extern fn EVP_PKEY_verify_init(ctx: ?*EVP_PKEY_CTX) c_int;
pub extern fn EVP_PKEY_verify(ctx: ?*EVP_PKEY_CTX, sig: [*c]const u8, sig_len: usize, digest: [*c]const u8, digest_len: usize) c_int;
pub extern fn EVP_PKEY_encrypt_init(ctx: ?*EVP_PKEY_CTX) c_int;
pub extern fn EVP_PKEY_encrypt(ctx: ?*EVP_PKEY_CTX, out: [*c]u8, out_len: [*c]usize, in: [*c]const u8, in_len: usize) c_int;
pub extern fn EVP_PKEY_decrypt_init(ctx: ?*EVP_PKEY_CTX) c_int;
pub extern fn EVP_PKEY_decrypt(ctx: ?*EVP_PKEY_CTX, out: [*c]u8, out_len: [*c]usize, in: [*c]const u8, in_len: usize) c_int;
pub extern fn EVP_PKEY_verify_recover_init(ctx: ?*EVP_PKEY_CTX) c_int;
pub extern fn EVP_PKEY_verify_recover(ctx: ?*EVP_PKEY_CTX, out: [*c]u8, out_len: [*c]usize, sig: [*c]const u8, siglen: usize) c_int;
pub extern fn EVP_PKEY_derive_init(ctx: ?*EVP_PKEY_CTX) c_int;
pub extern fn EVP_PKEY_derive_set_peer(ctx: ?*EVP_PKEY_CTX, peer: [*c]EVP_PKEY) c_int;
pub extern fn EVP_PKEY_derive(ctx: ?*EVP_PKEY_CTX, key: [*c]u8, out_key_len: [*c]usize) c_int;
pub extern fn EVP_PKEY_keygen_init(ctx: ?*EVP_PKEY_CTX) c_int;
pub extern fn EVP_PKEY_keygen(ctx: ?*EVP_PKEY_CTX, out_pkey: [*c][*c]EVP_PKEY) c_int;
pub extern fn EVP_PKEY_paramgen_init(ctx: ?*EVP_PKEY_CTX) c_int;
pub extern fn EVP_PKEY_paramgen(ctx: ?*EVP_PKEY_CTX, out_pkey: [*c][*c]EVP_PKEY) c_int;
pub extern fn EVP_PKEY_CTX_set_signature_md(ctx: ?*EVP_PKEY_CTX, md: ?*const EVP_MD) c_int;
pub extern fn EVP_PKEY_CTX_get_signature_md(ctx: ?*EVP_PKEY_CTX, out_md: [*c]?*const EVP_MD) c_int;
pub extern fn EVP_PKEY_CTX_set_rsa_padding(ctx: ?*EVP_PKEY_CTX, padding: c_int) c_int;
pub extern fn EVP_PKEY_CTX_get_rsa_padding(ctx: ?*EVP_PKEY_CTX, out_padding: [*c]c_int) c_int;
pub extern fn EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx: ?*EVP_PKEY_CTX, salt_len: c_int) c_int;
pub extern fn EVP_PKEY_CTX_get_rsa_pss_saltlen(ctx: ?*EVP_PKEY_CTX, out_salt_len: [*c]c_int) c_int;
pub extern fn EVP_PKEY_CTX_set_rsa_keygen_bits(ctx: ?*EVP_PKEY_CTX, bits: c_int) c_int;
pub extern fn EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx: ?*EVP_PKEY_CTX, e: [*c]BIGNUM) c_int;
pub extern fn EVP_PKEY_CTX_set_rsa_oaep_md(ctx: ?*EVP_PKEY_CTX, md: ?*const EVP_MD) c_int;
pub extern fn EVP_PKEY_CTX_get_rsa_oaep_md(ctx: ?*EVP_PKEY_CTX, out_md: [*c]?*const EVP_MD) c_int;
pub extern fn EVP_PKEY_CTX_set_rsa_mgf1_md(ctx: ?*EVP_PKEY_CTX, md: ?*const EVP_MD) c_int;
pub extern fn EVP_PKEY_CTX_get_rsa_mgf1_md(ctx: ?*EVP_PKEY_CTX, out_md: [*c]?*const EVP_MD) c_int;
pub extern fn EVP_PKEY_CTX_set0_rsa_oaep_label(ctx: ?*EVP_PKEY_CTX, label: [*c]u8, label_len: usize) c_int;
pub extern fn EVP_PKEY_CTX_get0_rsa_oaep_label(ctx: ?*EVP_PKEY_CTX, out_label: [*c][*c]const u8) c_int;
pub extern fn EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx: ?*EVP_PKEY_CTX, nid: c_int) c_int;
pub extern fn EVP_PKEY_get0(pkey: [*c]const EVP_PKEY) ?*anyopaque;
pub extern fn EVP_PKEY_CTX_free(ctx: *EVP_PKEY_CTX) void;
pub extern fn EVP_PKEY_CTX_dup(ctx: *EVP_PKEY_CTX) ?*EVP_PKEY_CTX;
pub extern fn EVP_PKEY_CTX_get0_pkey(ctx: *EVP_PKEY_CTX) ?*EVP_PKEY;
pub extern fn EVP_PKEY_sign_init(ctx: *EVP_PKEY_CTX) c_int;
pub extern fn EVP_PKEY_sign(ctx: *EVP_PKEY_CTX, sig: [*]u8, sig_len: *usize, digest: [*c]const u8, digest_len: usize) c_int;
pub extern fn EVP_PKEY_verify_init(ctx: *EVP_PKEY_CTX) c_int;
pub extern fn EVP_PKEY_verify(ctx: *EVP_PKEY_CTX, sig: [*c]const u8, sig_len: usize, digest: [*c]const u8, digest_len: usize) c_int;
pub extern fn EVP_PKEY_encrypt_init(ctx: *EVP_PKEY_CTX) c_int;
pub extern fn EVP_PKEY_encrypt(ctx: *EVP_PKEY_CTX, out: [*]u8, out_len: *usize, in: [*c]const u8, in_len: usize) c_int;
pub extern fn EVP_PKEY_decrypt_init(ctx: *EVP_PKEY_CTX) c_int;
pub extern fn EVP_PKEY_decrypt(ctx: *EVP_PKEY_CTX, out: [*]u8, out_len: *usize, in: [*c]const u8, in_len: usize) c_int;
pub extern fn EVP_PKEY_verify_recover_init(ctx: *EVP_PKEY_CTX) c_int;
pub extern fn EVP_PKEY_verify_recover(ctx: *EVP_PKEY_CTX, out: [*]u8, out_len: *usize, sig: [*c]const u8, siglen: usize) c_int;
pub extern fn EVP_PKEY_derive_init(ctx: *EVP_PKEY_CTX) c_int;
pub extern fn EVP_PKEY_derive_set_peer(ctx: *EVP_PKEY_CTX, peer: ?[*]EVP_PKEY) c_int;
pub extern fn EVP_PKEY_derive(ctx: *EVP_PKEY_CTX, key: [*c]u8, out_key_len: [*c]usize) c_int;
pub extern fn EVP_PKEY_keygen_init(ctx: *EVP_PKEY_CTX) c_int;
pub extern fn EVP_PKEY_keygen(ctx: *EVP_PKEY_CTX, out_pkey: [*c][*c]EVP_PKEY) c_int;
pub extern fn EVP_PKEY_paramgen_init(ctx: *EVP_PKEY_CTX) c_int;
pub extern fn EVP_PKEY_paramgen(ctx: *EVP_PKEY_CTX, out_pkey: [*c][*c]EVP_PKEY) c_int;
pub extern fn EVP_PKEY_CTX_set_signature_md(ctx: *EVP_PKEY_CTX, md: ?*const EVP_MD) c_int;
pub extern fn EVP_PKEY_CTX_get_signature_md(ctx: *EVP_PKEY_CTX, out_md: **const EVP_MD) c_int;
pub extern fn EVP_PKEY_CTX_set_rsa_padding(ctx: *EVP_PKEY_CTX, padding: c_int) c_int;
pub extern fn EVP_PKEY_CTX_get_rsa_padding(ctx: *EVP_PKEY_CTX, out_padding: *c_int) c_int;
pub extern fn EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx: *EVP_PKEY_CTX, salt_len: c_int) c_int;
pub extern fn EVP_PKEY_CTX_get_rsa_pss_saltlen(ctx: *EVP_PKEY_CTX, out_salt_len: *c_int) c_int;
pub extern fn EVP_PKEY_CTX_set_rsa_keygen_bits(ctx: *EVP_PKEY_CTX, bits: c_int) c_int;
pub extern fn EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx: *EVP_PKEY_CTX, e: [*c]BIGNUM) c_int;
pub extern fn EVP_PKEY_CTX_set_rsa_oaep_md(ctx: *EVP_PKEY_CTX, md: *const EVP_MD) c_int;
pub extern fn EVP_PKEY_CTX_get_rsa_oaep_md(ctx: *EVP_PKEY_CTX, out_md: *?*const EVP_MD) c_int;
pub extern fn EVP_PKEY_CTX_set_rsa_mgf1_md(ctx: *EVP_PKEY_CTX, md: ?*const EVP_MD) c_int;
pub extern fn EVP_PKEY_CTX_get_rsa_mgf1_md(ctx: *EVP_PKEY_CTX, out_md: *?*const EVP_MD) c_int;
pub extern fn EVP_PKEY_CTX_set0_rsa_oaep_label(ctx: *EVP_PKEY_CTX, label: [*]u8, label_len: usize) c_int;
pub extern fn EVP_PKEY_CTX_get0_rsa_oaep_label(ctx: *EVP_PKEY_CTX, out_label: ?*[*:0]const u8) c_int;
pub extern fn EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx: *EVP_PKEY_CTX, nid: c_int) c_int;
pub extern fn EVP_PKEY_get0(pkey: *const EVP_PKEY) ?*anyopaque;
pub extern fn OpenSSL_add_all_algorithms() void;
pub extern fn OPENSSL_add_all_algorithms_conf() void;
pub extern fn OpenSSL_add_all_ciphers() void;
@@ -1441,21 +1441,21 @@ pub extern fn EVP_cleanup() void;
pub extern fn EVP_CIPHER_do_all_sorted(callback: ?*const fn (?*const EVP_CIPHER, [*c]const u8, [*c]const u8, ?*anyopaque) callconv(.C) void, arg: ?*anyopaque) void;
pub extern fn EVP_MD_do_all_sorted(callback: ?*const fn (?*const EVP_MD, [*c]const u8, [*c]const u8, ?*anyopaque) callconv(.C) void, arg: ?*anyopaque) void;
pub extern fn EVP_MD_do_all(callback: ?*const fn (?*const EVP_MD, [*c]const u8, [*c]const u8, ?*anyopaque) callconv(.C) void, arg: ?*anyopaque) void;
pub extern fn i2d_PrivateKey(key: [*c]const EVP_PKEY, outp: [*c][*c]u8) c_int;
pub extern fn i2d_PublicKey(key: [*c]const EVP_PKEY, outp: [*c][*c]u8) c_int;
pub extern fn i2d_PrivateKey(key: ?*const EVP_PKEY, outp: [*c][*c]u8) c_int;
pub extern fn i2d_PublicKey(key: ?*const EVP_PKEY, outp: [*c][*c]u8) c_int;
pub extern fn d2i_PrivateKey(@"type": c_int, out: [*c][*c]EVP_PKEY, inp: [*c][*c]const u8, len: c_long) [*c]EVP_PKEY;
pub extern fn d2i_AutoPrivateKey(out: [*c][*c]EVP_PKEY, inp: [*c][*c]const u8, len: c_long) [*c]EVP_PKEY;
pub extern fn d2i_PublicKey(@"type": c_int, out: [*c][*c]EVP_PKEY, inp: [*c][*c]const u8, len: c_long) [*c]EVP_PKEY;
pub extern fn EVP_PKEY_get0_DH(pkey: [*c]const EVP_PKEY) ?*DH;
pub extern fn EVP_PKEY_get1_DH(pkey: [*c]const EVP_PKEY) ?*DH;
pub extern fn EVP_PKEY_get0_DH(pkey: *const EVP_PKEY) ?*DH;
pub extern fn EVP_PKEY_get1_DH(pkey: *const EVP_PKEY) ?*DH;
pub extern fn EVP_PKEY_CTX_set_ec_param_enc(ctx: ?*EVP_PKEY_CTX, encoding: c_int) c_int;
pub extern fn EVP_PKEY_set1_tls_encodedpoint(pkey: [*c]EVP_PKEY, in: [*c]const u8, len: usize) c_int;
pub extern fn EVP_PKEY_get1_tls_encodedpoint(pkey: [*c]const EVP_PKEY, out_ptr: [*c][*c]u8) usize;
pub extern fn EVP_PKEY_base_id(pkey: [*c]const EVP_PKEY) c_int;
pub extern fn EVP_PKEY_set1_tls_encodedpoint(pkey: *EVP_PKEY, in: [*c]const u8, len: usize) c_int;
pub extern fn EVP_PKEY_get1_tls_encodedpoint(pkey: *const EVP_PKEY, out_ptr: [*c][*c]u8) usize;
pub extern fn EVP_PKEY_base_id(pkey: *const EVP_PKEY) c_int;
pub extern fn EVP_PKEY_CTX_set_rsa_pss_keygen_md(ctx: ?*EVP_PKEY_CTX, md: ?*const EVP_MD) c_int;
pub extern fn EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(ctx: ?*EVP_PKEY_CTX, salt_len: c_int) c_int;
pub extern fn EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(ctx: ?*EVP_PKEY_CTX, md: ?*const EVP_MD) c_int;
pub extern fn i2d_PUBKEY(pkey: [*c]const EVP_PKEY, outp: [*c][*c]u8) c_int;
pub extern fn i2d_PUBKEY(pkey: *const EVP_PKEY, outp: [*c][*c]u8) c_int;
pub extern fn d2i_PUBKEY(out: [*c][*c]EVP_PKEY, inp: [*c][*c]const u8, len: c_long) [*c]EVP_PKEY;
pub extern fn i2d_RSA_PUBKEY(rsa: ?*const RSA, outp: [*c][*c]u8) c_int;
pub extern fn d2i_RSA_PUBKEY(out: [*c]?*RSA, inp: [*c][*c]const u8, len: c_long) ?*RSA;
@@ -1515,7 +1515,7 @@ pub extern fn PKCS7_type_is_encrypted(p7: [*c]const PKCS7) c_int;
pub extern fn PKCS7_type_is_enveloped(p7: [*c]const PKCS7) c_int;
pub extern fn PKCS7_type_is_signed(p7: [*c]const PKCS7) c_int;
pub extern fn PKCS7_type_is_signedAndEnveloped(p7: [*c]const PKCS7) c_int;
pub extern fn PKCS7_sign(sign_cert: ?*X509, pkey: [*c]EVP_PKEY, certs: ?*struct_stack_st_X509, data: [*c]BIO, flags: c_int) [*c]PKCS7;
pub extern fn PKCS7_sign(sign_cert: ?*X509, pkey: *EVP_PKEY, certs: ?*struct_stack_st_X509, data: [*c]BIO, flags: c_int) [*c]PKCS7;
pub extern fn BN_new() [*c]BIGNUM;
pub extern fn BN_init(bn: [*c]BIGNUM) void;
pub extern fn BN_free(bn: [*c]BIGNUM) void;
@@ -1533,10 +1533,10 @@ pub extern fn BN_set_u64(bn: [*c]BIGNUM, value: u64) c_int;
pub extern fn BN_set_negative(bn: [*c]BIGNUM, sign: c_int) void;
pub extern fn BN_is_negative(bn: [*c]const BIGNUM) c_int;
pub extern fn BN_bin2bn(in: [*c]const u8, len: usize, ret: [*c]BIGNUM) [*c]BIGNUM;
pub extern fn BN_bn2bin(in: [*c]const BIGNUM, out: [*c]u8) usize;
pub extern fn BN_bn2bin(in: [*c]const BIGNUM, out: [*]u8) usize;
pub extern fn BN_le2bn(in: [*c]const u8, len: usize, ret: [*c]BIGNUM) [*c]BIGNUM;
pub extern fn BN_bn2le_padded(out: [*c]u8, len: usize, in: [*c]const BIGNUM) c_int;
pub extern fn BN_bn2bin_padded(out: [*c]u8, len: usize, in: [*c]const BIGNUM) c_int;
pub extern fn BN_bn2le_padded(out: [*]u8, len: usize, in: [*c]const BIGNUM) c_int;
pub extern fn BN_bn2bin_padded(out: [*]u8, len: usize, in: [*c]const BIGNUM) c_int;
pub extern fn BN_bn2cbb_padded(out: ?*CBB, len: usize, in: [*c]const BIGNUM) c_int;
pub extern fn BN_bn2hex(bn: [*c]const BIGNUM) [*c]u8;
pub extern fn BN_hex2bn(outp: [*c][*c]BIGNUM, in: [*c]const u8) c_int;
@@ -2201,8 +2201,8 @@ pub extern fn BN_get_rfc3526_prime_6144(ret: [*c]BIGNUM) [*c]BIGNUM;
pub extern fn BN_get_rfc3526_prime_8192(ret: [*c]BIGNUM) [*c]BIGNUM;
pub extern fn DH_generate_parameters_ex(dh: ?*DH, prime_bits: c_int, generator: c_int, cb: [*c]BN_GENCB) c_int;
pub extern fn DH_generate_key(dh: ?*DH) c_int;
pub extern fn DH_compute_key_padded(out: [*c]u8, peers_key: [*c]const BIGNUM, dh: ?*DH) c_int;
pub extern fn DH_compute_key_hashed(dh: ?*DH, out: [*c]u8, out_len: [*c]usize, max_out_len: usize, peers_key: [*c]const BIGNUM, digest: ?*const EVP_MD) c_int;
pub extern fn DH_compute_key_padded(out: [*]u8, peers_key: [*c]const BIGNUM, dh: ?*DH) c_int;
pub extern fn DH_compute_key_hashed(dh: ?*DH, out: [*]u8, out_len: *usize, max_out_len: usize, peers_key: [*c]const BIGNUM, digest: ?*const EVP_MD) c_int;
pub extern fn DH_size(dh: ?*const DH) c_int;
pub extern fn DH_num_bits(dh: ?*const DH) c_uint;
pub extern fn DH_check(dh: ?*const DH, out_flags: [*c]c_int) c_int;
@@ -2213,7 +2213,7 @@ pub extern fn DH_marshal_parameters(cbb: ?*CBB, dh: ?*const DH) c_int;
pub extern fn DH_generate_parameters(prime_len: c_int, generator: c_int, callback: ?*const fn (c_int, c_int, ?*anyopaque) callconv(.C) void, cb_arg: ?*anyopaque) ?*DH;
pub extern fn d2i_DHparams(ret: [*c]?*DH, inp: [*c][*c]const u8, len: c_long) ?*DH;
pub extern fn i2d_DHparams(in: ?*const DH, outp: [*c][*c]u8) c_int;
pub extern fn DH_compute_key(out: [*c]u8, peers_key: [*c]const BIGNUM, dh: ?*DH) c_int;
pub extern fn DH_compute_key(out: [*]u8, peers_key: [*c]const BIGNUM, dh: ?*DH) c_int;
pub extern fn ENGINE_new() ?*ENGINE;
pub extern fn ENGINE_free(engine: ?*ENGINE) c_int;
pub extern fn ENGINE_set_RSA_method(engine: ?*ENGINE, method: [*c]const RSA_METHOD, method_size: usize) c_int;
@@ -2245,7 +2245,7 @@ pub extern fn DSA_SIG_set0(sig: [*c]DSA_SIG, r: [*c]BIGNUM, s: [*c]BIGNUM) c_int
pub extern fn DSA_do_sign(digest: [*c]const u8, digest_len: usize, dsa: [*c]const DSA) [*c]DSA_SIG;
pub extern fn DSA_do_verify(digest: [*c]const u8, digest_len: usize, sig: [*c]DSA_SIG, dsa: [*c]const DSA) c_int;
pub extern fn DSA_do_check_signature(out_valid: [*c]c_int, digest: [*c]const u8, digest_len: usize, sig: [*c]DSA_SIG, dsa: [*c]const DSA) c_int;
pub extern fn DSA_sign(@"type": c_int, digest: [*c]const u8, digest_len: usize, out_sig: [*c]u8, out_siglen: [*c]c_uint, dsa: [*c]const DSA) c_int;
pub extern fn DSA_sign(@"type": c_int, digest: [*c]const u8, digest_len: usize, out_sig: [*]u8, out_siglen: [*c]c_uint, dsa: [*c]const DSA) c_int;
pub extern fn DSA_verify(@"type": c_int, digest: [*c]const u8, digest_len: usize, sig: [*c]const u8, sig_len: usize, dsa: [*c]const DSA) c_int;
pub extern fn DSA_check_signature(out_valid: [*c]c_int, digest: [*c]const u8, digest_len: usize, sig: [*c]const u8, sig_len: usize, dsa: [*c]const DSA) c_int;
pub extern fn DSA_size(dsa: [*c]const DSA) c_int;
@@ -2347,7 +2347,7 @@ pub extern fn EC_KEY_set_public_key_affine_coordinates(key: ?*EC_KEY, x: [*c]con
pub extern fn EC_KEY_oct2key(key: ?*EC_KEY, in: [*c]const u8, len: usize, ctx: ?*BN_CTX) c_int;
pub extern fn EC_KEY_key2buf(key: ?*const EC_KEY, form: point_conversion_form_t, out_buf: [*c][*c]u8, ctx: ?*BN_CTX) usize;
pub extern fn EC_KEY_oct2priv(key: ?*EC_KEY, in: [*c]const u8, len: usize) c_int;
pub extern fn EC_KEY_priv2oct(key: ?*const EC_KEY, out: [*c]u8, max_out: usize) usize;
pub extern fn EC_KEY_priv2oct(key: ?*const EC_KEY, out: [*]u8, max_out: usize) usize;
pub extern fn EC_KEY_priv2buf(key: ?*const EC_KEY, out_buf: [*c][*c]u8) usize;
pub extern fn EC_KEY_generate_key(key: ?*EC_KEY) c_int;
pub extern fn EC_KEY_generate_key_fips(key: ?*EC_KEY) c_int;
@@ -2368,7 +2368,7 @@ pub extern fn i2d_ECParameters(key: ?*const EC_KEY, outp: [*c][*c]u8) c_int;
pub extern fn o2i_ECPublicKey(out_key: [*c]?*EC_KEY, inp: [*c][*c]const u8, len: c_long) ?*EC_KEY;
pub extern fn i2o_ECPublicKey(key: ?*const EC_KEY, outp: [*c][*c]u8) c_int;
pub extern fn ECDH_compute_key(out: ?*anyopaque, outlen: usize, pub_key: ?*const EC_POINT, priv_key: ?*const EC_KEY, kdf: ?*const fn (?*const anyopaque, usize, ?*anyopaque, [*c]usize) callconv(.C) ?*anyopaque) c_int;
pub extern fn ECDH_compute_key_fips(out: [*c]u8, out_len: usize, pub_key: ?*const EC_POINT, priv_key: ?*const EC_KEY) c_int;
pub extern fn ECDH_compute_key_fips(out: [*]u8, out_len: usize, pub_key: ?*const EC_POINT, priv_key: ?*const EC_KEY) c_int;
pub extern fn ECDSA_sign(@"type": c_int, digest: [*c]const u8, digest_len: usize, sig: [*c]u8, sig_len: [*c]c_uint, key: ?*const EC_KEY) c_int;
pub extern fn ECDSA_verify(@"type": c_int, digest: [*c]const u8, digest_len: usize, sig: [*c]const u8, sig_len: usize, key: ?*const EC_KEY) c_int;
pub extern fn ECDSA_size(key: ?*const EC_KEY) usize;
@@ -2383,7 +2383,7 @@ pub extern fn ECDSA_do_verify(digest: [*c]const u8, digest_len: usize, sig: [*c]
pub extern fn ECDSA_SIG_parse(cbs: [*c]CBS) [*c]ECDSA_SIG;
pub extern fn ECDSA_SIG_from_bytes(in: [*c]const u8, in_len: usize) [*c]ECDSA_SIG;
pub extern fn ECDSA_SIG_marshal(cbb: ?*CBB, sig: [*c]const ECDSA_SIG) c_int;
pub extern fn ECDSA_SIG_to_bytes(out_bytes: [*c][*c]u8, out_len: [*c]usize, sig: [*c]const ECDSA_SIG) c_int;
pub extern fn ECDSA_SIG_to_bytes(out_bytes: [*c][*c]u8, out_len: *usize, sig: [*c]const ECDSA_SIG) c_int;
pub extern fn ECDSA_SIG_max_len(order_len: usize) usize;
pub extern fn ECDSA_sign_with_nonce_and_leak_private_key_for_testing(digest: [*c]const u8, digest_len: usize, eckey: ?*const EC_KEY, nonce: [*c]const u8, nonce_len: usize) [*c]ECDSA_SIG;
pub extern fn d2i_ECDSA_SIG(out: [*c][*c]ECDSA_SIG, inp: [*c][*c]const u8, len: c_long) [*c]ECDSA_SIG;
@@ -2392,11 +2392,11 @@ pub extern fn i2d_ECDSA_SIG(sig: [*c]const ECDSA_SIG, outp: [*c][*c]u8) c_int;
// pub extern fn CBS_skip(cbs: [*c]CBS, len: usize) c_int;
// pub extern fn CBS_data(cbs: [*c]const CBS) [*c]const u8;
// pub extern fn CBS_len(cbs: [*c]const CBS) usize;
// pub extern fn CBS_stow(cbs: [*c]const CBS, out_ptr: [*c][*c]u8, out_len: [*c]usize) c_int;
// pub extern fn CBS_stow(cbs: [*c]const CBS, out_ptr: [*c][*c]u8, out_len: *usize) c_int;
// pub extern fn CBS_strdup(cbs: [*c]const CBS, out_ptr: [*c][*c]u8) c_int;
// pub extern fn CBS_contains_zero_byte(cbs: [*c]const CBS) c_int;
// pub extern fn CBS_mem_equal(cbs: [*c]const CBS, data: [*c]const u8, len: usize) c_int;
// pub extern fn CBS_get_u8(cbs: [*c]CBS, out: [*c]u8) c_int;
// pub extern fn CBS_get_u8(cbs: [*c]CBS, out: [*]u8) c_int;
// pub extern fn CBS_get_u16(cbs: [*c]CBS, out: [*c]u16) c_int;
// pub extern fn CBS_get_u16le(cbs: [*c]CBS, out: [*c]u16) c_int;
// pub extern fn CBS_get_u24(cbs: [*c]CBS, out: [*c]u32) c_int;
@@ -2404,9 +2404,9 @@ pub extern fn i2d_ECDSA_SIG(sig: [*c]const ECDSA_SIG, outp: [*c][*c]u8) c_int;
// pub extern fn CBS_get_u32le(cbs: [*c]CBS, out: [*c]u32) c_int;
// pub extern fn CBS_get_u64(cbs: [*c]CBS, out: [*c]u64) c_int;
// pub extern fn CBS_get_u64le(cbs: [*c]CBS, out: [*c]u64) c_int;
// pub extern fn CBS_get_last_u8(cbs: [*c]CBS, out: [*c]u8) c_int;
// pub extern fn CBS_get_last_u8(cbs: [*c]CBS, out: [*]u8) c_int;
// pub extern fn CBS_get_bytes(cbs: [*c]CBS, out: [*c]CBS, len: usize) c_int;
// pub extern fn CBS_copy_bytes(cbs: [*c]CBS, out: [*c]u8, len: usize) c_int;
// pub extern fn CBS_copy_bytes(cbs: [*c]CBS, out: [*]u8, len: usize) c_int;
// pub extern fn CBS_get_u8_length_prefixed(cbs: [*c]CBS, out: [*c]CBS) c_int;
// pub extern fn CBS_get_u16_length_prefixed(cbs: [*c]CBS, out: [*c]CBS) c_int;
// pub extern fn CBS_get_u24_length_prefixed(cbs: [*c]CBS, out: [*c]CBS) c_int;
@@ -2435,7 +2435,7 @@ pub extern fn i2d_ECDSA_SIG(sig: [*c]const ECDSA_SIG, outp: [*c][*c]u8) c_int;
// pub extern fn CBB_init(cbb: ?*CBB, initial_capacity: usize) c_int;
// pub extern fn CBB_init_fixed(cbb: ?*CBB, buf: [*c]u8, len: usize) c_int;
// pub extern fn CBB_cleanup(cbb: ?*CBB) void;
// pub extern fn CBB_finish(cbb: ?*CBB, out_data: [*c][*c]u8, out_len: [*c]usize) c_int;
// pub extern fn CBB_finish(cbb: ?*CBB, out_data: [*c][*c]u8, out_len: *usize) c_int;
// pub extern fn CBB_flush(cbb: ?*CBB) c_int;
// pub extern fn CBB_data(cbb: ?*const CBB) [*c]const u8;
// pub extern fn CBB_len(cbb: ?*const CBB) usize;
@@ -2461,7 +2461,7 @@ pub extern fn i2d_ECDSA_SIG(sig: [*c]const ECDSA_SIG, outp: [*c][*c]u8) c_int;
// pub extern fn CBB_add_asn1_uint64_with_tag(cbb: ?*CBB, value: u64, tag: CBS_ASN1_TAG) c_int;
// pub extern fn CBB_add_asn1_int64(cbb: ?*CBB, value: i64) c_int;
// pub extern fn CBB_add_asn1_int64_with_tag(cbb: ?*CBB, value: i64, tag: CBS_ASN1_TAG) c_int;
// pub extern fn CBB_add_asn1_octet_string(cbb: ?*CBB, data: [*c]const u8, data_len: usize) c_int;
// pub extern fn CBB_add_asn1_octet_string(cbb: ?*CBB, data: [*]const u8, data_len: usize) c_int;
// pub extern fn CBB_add_asn1_bool(cbb: ?*CBB, value: c_int) c_int;
// pub extern fn CBB_add_asn1_oid_from_text(cbb: ?*CBB, text: [*c]const u8, len: usize) c_int;
// pub extern fn CBB_flush_asn1_set_of(cbb: ?*CBB) c_int;
@@ -2479,7 +2479,7 @@ pub extern fn OBJ_nid2sn(nid: c_int) [*c]const u8;
pub extern fn OBJ_nid2ln(nid: c_int) [*c]const u8;
pub extern fn OBJ_nid2cbb(out: ?*CBB, nid: c_int) c_int;
pub extern fn OBJ_txt2obj(s: [*c]const u8, dont_search_names: c_int) ?*ASN1_OBJECT;
pub extern fn OBJ_obj2txt(out: [*c]u8, out_len: c_int, obj: ?*const ASN1_OBJECT, always_return_oid: c_int) c_int;
pub extern fn OBJ_obj2txt(out: [*]u8, out_len: c_int, obj: ?*const ASN1_OBJECT, always_return_oid: c_int) c_int;
pub extern fn OBJ_create(oid: [*c]const u8, short_name: [*c]const u8, long_name: [*c]const u8) c_int;
pub extern fn OBJ_find_sigid_algs(sign_nid: c_int, out_digest_nid: [*c]c_int, out_pkey_nid: [*c]c_int) c_int;
pub extern fn OBJ_find_sigid_by_algs(out_sign_nid: [*c]c_int, digest_nid: c_int, pkey_nid: c_int) c_int;
@@ -2639,16 +2639,16 @@ pub extern fn RSA_set0_factors(rsa: ?*RSA, p: [*c]BIGNUM, q: [*c]BIGNUM) c_int;
pub extern fn RSA_set0_crt_params(rsa: ?*RSA, dmp1: [*c]BIGNUM, dmq1: [*c]BIGNUM, iqmp: [*c]BIGNUM) c_int;
pub extern fn RSA_generate_key_ex(rsa: ?*RSA, bits: c_int, e: [*c]const BIGNUM, cb: [*c]BN_GENCB) c_int;
pub extern fn RSA_generate_key_fips(rsa: ?*RSA, bits: c_int, cb: [*c]BN_GENCB) c_int;
pub extern fn RSA_encrypt(rsa: ?*RSA, out_len: [*c]usize, out: [*c]u8, max_out: usize, in: [*c]const u8, in_len: usize, padding: c_int) c_int;
pub extern fn RSA_decrypt(rsa: ?*RSA, out_len: [*c]usize, out: [*c]u8, max_out: usize, in: [*c]const u8, in_len: usize, padding: c_int) c_int;
pub extern fn RSA_encrypt(rsa: ?*RSA, out_len: *usize, out: [*]u8, max_out: usize, in: [*c]const u8, in_len: usize, padding: c_int) c_int;
pub extern fn RSA_decrypt(rsa: ?*RSA, out_len: *usize, out: [*]u8, max_out: usize, in: [*c]const u8, in_len: usize, padding: c_int) c_int;
pub extern fn RSA_public_encrypt(flen: usize, from: [*c]const u8, to: [*c]u8, rsa: ?*RSA, padding: c_int) c_int;
pub extern fn RSA_private_decrypt(flen: usize, from: [*c]const u8, to: [*c]u8, rsa: ?*RSA, padding: c_int) c_int;
pub extern fn RSA_sign(hash_nid: c_int, digest: [*c]const u8, digest_len: usize, out: [*c]u8, out_len: [*c]c_uint, rsa: ?*RSA) c_int;
pub extern fn RSA_sign_pss_mgf1(rsa: ?*RSA, out_len: [*c]usize, out: [*c]u8, max_out: usize, digest: [*c]const u8, digest_len: usize, md: ?*const EVP_MD, mgf1_md: ?*const EVP_MD, salt_len: c_int) c_int;
pub extern fn RSA_sign_raw(rsa: ?*RSA, out_len: [*c]usize, out: [*c]u8, max_out: usize, in: [*c]const u8, in_len: usize, padding: c_int) c_int;
pub extern fn RSA_sign(hash_nid: c_int, digest: [*c]const u8, digest_len: usize, out: [*]u8, out_len: [*c]c_uint, rsa: ?*RSA) c_int;
pub extern fn RSA_sign_pss_mgf1(rsa: ?*RSA, out_len: *usize, out: [*]u8, max_out: usize, digest: [*c]const u8, digest_len: usize, md: ?*const EVP_MD, mgf1_md: ?*const EVP_MD, salt_len: c_int) c_int;
pub extern fn RSA_sign_raw(rsa: ?*RSA, out_len: *usize, out: [*]u8, max_out: usize, in: [*c]const u8, in_len: usize, padding: c_int) c_int;
pub extern fn RSA_verify(hash_nid: c_int, digest: [*c]const u8, digest_len: usize, sig: [*c]const u8, sig_len: usize, rsa: ?*RSA) c_int;
pub extern fn RSA_verify_pss_mgf1(rsa: ?*RSA, digest: [*c]const u8, digest_len: usize, md: ?*const EVP_MD, mgf1_md: ?*const EVP_MD, salt_len: c_int, sig: [*c]const u8, sig_len: usize) c_int;
pub extern fn RSA_verify_raw(rsa: ?*RSA, out_len: [*c]usize, out: [*c]u8, max_out: usize, in: [*c]const u8, in_len: usize, padding: c_int) c_int;
pub extern fn RSA_verify_raw(rsa: ?*RSA, out_len: *usize, out: [*]u8, max_out: usize, in: [*c]const u8, in_len: usize, padding: c_int) c_int;
pub extern fn RSA_private_encrypt(flen: usize, from: [*c]const u8, to: [*c]u8, rsa: ?*RSA, padding: c_int) c_int;
pub extern fn RSA_public_decrypt(flen: usize, from: [*c]const u8, to: [*c]u8, rsa: ?*RSA, padding: c_int) c_int;
pub extern fn RSA_size(rsa: ?*const RSA) c_uint;
@@ -2664,11 +2664,11 @@ pub extern fn RSA_add_pkcs1_prefix(out_msg: [*c][*c]u8, out_msg_len: [*c]usize,
pub extern fn RSA_parse_public_key(cbs: [*c]CBS) ?*RSA;
pub extern fn RSA_public_key_from_bytes(in: [*c]const u8, in_len: usize) ?*RSA;
pub extern fn RSA_marshal_public_key(cbb: ?*CBB, rsa: ?*const RSA) c_int;
pub extern fn RSA_public_key_to_bytes(out_bytes: [*c][*c]u8, out_len: [*c]usize, rsa: ?*const RSA) c_int;
pub extern fn RSA_public_key_to_bytes(out_bytes: [*c][*c]u8, out_len: *usize, rsa: ?*const RSA) c_int;
pub extern fn RSA_parse_private_key(cbs: [*c]CBS) ?*RSA;
pub extern fn RSA_private_key_from_bytes(in: [*c]const u8, in_len: usize) ?*RSA;
pub extern fn RSA_marshal_private_key(cbb: ?*CBB, rsa: ?*const RSA) c_int;
pub extern fn RSA_private_key_to_bytes(out_bytes: [*c][*c]u8, out_len: [*c]usize, rsa: ?*const RSA) c_int;
pub extern fn RSA_private_key_to_bytes(out_bytes: [*c][*c]u8, out_len: *usize, rsa: ?*const RSA) c_int;
pub extern fn RSA_get_ex_new_index(argl: c_long, argp: ?*anyopaque, unused: [*c]CRYPTO_EX_unused, dup_unused: ?*const CRYPTO_EX_dup, free_func: ?*const CRYPTO_EX_free) c_int;
pub extern fn RSA_set_ex_data(rsa: ?*RSA, idx: c_int, arg: ?*anyopaque) c_int;
pub extern fn RSA_get_ex_data(rsa: ?*const RSA, idx: c_int) ?*anyopaque;
@@ -2687,32 +2687,32 @@ pub extern fn RSA_print(bio: [*c]BIO, rsa: ?*const RSA, indent: c_int) c_int;
pub extern fn RSA_get0_pss_params(rsa: ?*const RSA) [*c]const RSA_PSS_PARAMS;
pub extern fn SHA1_Init(sha: [*c]SHA_CTX) c_int;
pub extern fn SHA1_Update(sha: [*c]SHA_CTX, data: ?*const anyopaque, len: usize) c_int;
pub extern fn SHA1_Final(out: [*c]u8, sha: [*c]SHA_CTX) c_int;
pub extern fn SHA1(data: [*c]const u8, len: usize, out: [*c]u8) [*c]u8;
pub extern fn SHA1_Final(out: [*]u8, sha: [*c]SHA_CTX) c_int;
pub extern fn SHA1(data: [*c]const u8, len: usize, out: [*]u8) [*c]u8;
pub extern fn SHA1_Transform(sha: [*c]SHA_CTX, block: [*c]const u8) void;
pub extern fn SHA224_Init(sha: [*c]SHA256_CTX) c_int;
pub extern fn SHA224_Update(sha: [*c]SHA256_CTX, data: ?*const anyopaque, len: usize) c_int;
pub extern fn SHA224_Final(out: [*c]u8, sha: [*c]SHA256_CTX) c_int;
pub extern fn SHA224(data: [*c]const u8, len: usize, out: [*c]u8) [*c]u8;
pub extern fn SHA224_Final(out: [*]u8, sha: [*c]SHA256_CTX) c_int;
pub extern fn SHA224(data: [*c]const u8, len: usize, out: [*]u8) [*c]u8;
pub extern fn SHA256_Init(sha: [*c]SHA256_CTX) c_int;
pub extern fn SHA256_Update(sha: [*c]SHA256_CTX, data: ?*const anyopaque, len: usize) c_int;
pub extern fn SHA256_Final(out: [*c]u8, sha: [*c]SHA256_CTX) c_int;
pub extern fn SHA256(data: [*c]const u8, len: usize, out: [*c]u8) [*c]u8;
pub extern fn SHA256_Final(out: [*]u8, sha: [*c]SHA256_CTX) c_int;
pub extern fn SHA256(data: [*c]const u8, len: usize, out: [*]u8) [*c]u8;
pub extern fn SHA256_Transform(sha: [*c]SHA256_CTX, block: [*c]const u8) void;
pub extern fn SHA256_TransformBlocks(state: [*c]u32, data: [*c]const u8, num_blocks: usize) void;
pub extern fn SHA384_Init(sha: [*c]SHA512_CTX) c_int;
pub extern fn SHA384_Update(sha: [*c]SHA512_CTX, data: ?*const anyopaque, len: usize) c_int;
pub extern fn SHA384_Final(out: [*c]u8, sha: [*c]SHA512_CTX) c_int;
pub extern fn SHA384(data: [*c]const u8, len: usize, out: [*c]u8) [*c]u8;
pub extern fn SHA384_Final(out: [*]u8, sha: [*c]SHA512_CTX) c_int;
pub extern fn SHA384(data: [*c]const u8, len: usize, out: [*]u8) [*c]u8;
pub extern fn SHA512_Init(sha: [*c]SHA512_CTX) c_int;
pub extern fn SHA512_Update(sha: [*c]SHA512_CTX, data: ?*const anyopaque, len: usize) c_int;
pub extern fn SHA512_Final(out: [*c]u8, sha: [*c]SHA512_CTX) c_int;
pub extern fn SHA512(data: [*c]const u8, len: usize, out: [*c]u8) [*c]u8;
pub extern fn SHA512_Final(out: [*]u8, sha: [*c]SHA512_CTX) c_int;
pub extern fn SHA512(data: [*c]const u8, len: usize, out: [*]u8) [*c]u8;
pub extern fn SHA512_Transform(sha: [*c]SHA512_CTX, block: [*c]const u8) void;
pub extern fn SHA512_256_Init(sha: [*c]SHA512_CTX) c_int;
pub extern fn SHA512_256_Update(sha: [*c]SHA512_CTX, data: ?*const anyopaque, len: usize) c_int;
pub extern fn SHA512_256_Final(out: [*c]u8, sha: [*c]SHA512_CTX) c_int;
pub extern fn SHA512_256(data: [*c]const u8, len: usize, out: [*c]u8) [*c]u8;
pub extern fn SHA512_256_Final(out: [*]u8, sha: [*c]SHA512_CTX) c_int;
pub extern fn SHA512_256(data: [*c]const u8, len: usize, out: [*]u8) [*c]u8;
pub const sk_X509_free_func = ?*const fn (?*X509) callconv(.C) void;
pub const sk_X509_copy_func = ?*const fn (?*X509) callconv(.C) ?*X509;
pub const sk_X509_cmp_func = ?*const fn ([*c]?*const X509, [*c]?*const X509) callconv(.C) c_int;
@@ -2845,7 +2845,7 @@ pub extern fn X509_get0_notAfter(x509: ?*const X509) [*c]const ASN1_TIME;
pub extern fn X509_get_issuer_name(x509: ?*const X509) ?*X509_NAME;
pub extern fn X509_get_subject_name(x509: ?*const X509) ?*X509_NAME;
pub extern fn X509_get_X509_PUBKEY(x509: ?*const X509) ?*X509_PUBKEY;
pub extern fn X509_get_pubkey(x509: ?*X509) [*c]EVP_PKEY;
pub extern fn X509_get_pubkey(x509: ?*X509) ?*EVP_PKEY;
pub extern fn X509_get0_pubkey_bitstr(x509: ?*const X509) [*c]ASN1_BIT_STRING;
pub extern fn X509_get0_uids(x509: ?*const X509, out_issuer_uid: [*c][*c]const ASN1_BIT_STRING, out_subject_uid: [*c][*c]const ASN1_BIT_STRING) void;
pub const struct_stack_st_X509_EXTENSION = opaque {};
@@ -2868,10 +2868,10 @@ pub extern fn X509_getm_notBefore(x509: ?*X509) [*c]ASN1_TIME;
pub extern fn X509_getm_notAfter(x: ?*X509) [*c]ASN1_TIME;
pub extern fn X509_set_issuer_name(x509: ?*X509, name: ?*X509_NAME) c_int;
pub extern fn X509_set_subject_name(x509: ?*X509, name: ?*X509_NAME) c_int;
pub extern fn X509_set_pubkey(x509: ?*X509, pkey: [*c]EVP_PKEY) c_int;
pub extern fn X509_set_pubkey(x509: ?*X509, pkey: *EVP_PKEY) c_int;
pub extern fn X509_delete_ext(x: ?*X509, loc: c_int) ?*X509_EXTENSION;
pub extern fn X509_add_ext(x: ?*X509, ex: ?*const X509_EXTENSION, loc: c_int) c_int;
pub extern fn X509_sign(x509: ?*X509, pkey: [*c]EVP_PKEY, md: ?*const EVP_MD) c_int;
pub extern fn X509_sign(x509: ?*X509, pkey: *EVP_PKEY, md: ?*const EVP_MD) c_int;
pub extern fn X509_sign_ctx(x509: ?*X509, ctx: [*c]EVP_MD_CTX) c_int;
pub extern fn i2d_re_X509_tbs(x509: ?*X509, outp: [*c][*c]u8) c_int;
pub extern fn X509_set1_signature_algo(x509: ?*X509, algo: [*c]const X509_ALGOR) c_int;
@@ -3136,7 +3136,7 @@ pub extern fn X509_CRL_set1_lastUpdate(crl: ?*X509_CRL, tm: [*c]const ASN1_TIME)
pub extern fn X509_CRL_set1_nextUpdate(crl: ?*X509_CRL, tm: [*c]const ASN1_TIME) c_int;
pub extern fn X509_CRL_delete_ext(x: ?*X509_CRL, loc: c_int) ?*X509_EXTENSION;
pub extern fn X509_CRL_add_ext(x: ?*X509_CRL, ex: ?*const X509_EXTENSION, loc: c_int) c_int;
pub extern fn X509_CRL_sign(crl: ?*X509_CRL, pkey: [*c]EVP_PKEY, md: ?*const EVP_MD) c_int;
pub extern fn X509_CRL_sign(crl: ?*X509_CRL, pkey: *EVP_PKEY, md: ?*const EVP_MD) c_int;
pub extern fn X509_CRL_sign_ctx(crl: ?*X509_CRL, ctx: [*c]EVP_MD_CTX) c_int;
pub extern fn i2d_re_X509_CRL_tbs(crl: ?*X509_CRL, outp: [*c][*c]u8) c_int;
pub extern fn X509_CRL_set1_signature_algo(crl: ?*X509_CRL, algo: [*c]const X509_ALGOR) c_int;
@@ -3154,8 +3154,8 @@ pub extern fn X509_REQ_get_signature_nid(req: ?*const X509_REQ) c_int;
pub extern fn X509_REQ_new() ?*X509_REQ;
pub extern fn X509_REQ_set_version(req: ?*X509_REQ, version: c_long) c_int;
pub extern fn X509_REQ_set_subject_name(req: ?*X509_REQ, name: ?*X509_NAME) c_int;
pub extern fn X509_REQ_set_pubkey(req: ?*X509_REQ, pkey: [*c]EVP_PKEY) c_int;
pub extern fn X509_REQ_sign(req: ?*X509_REQ, pkey: [*c]EVP_PKEY, md: ?*const EVP_MD) c_int;
pub extern fn X509_REQ_set_pubkey(req: ?*X509_REQ, pkey: *EVP_PKEY) c_int;
pub extern fn X509_REQ_sign(req: ?*X509_REQ, pkey: *EVP_PKEY, md: ?*const EVP_MD) c_int;
pub extern fn X509_REQ_sign_ctx(req: ?*X509_REQ, ctx: [*c]EVP_MD_CTX) c_int;
pub extern fn i2d_re_X509_REQ_tbs(req: ?*X509_REQ, outp: [*c][*c]u8) c_int;
pub extern fn X509_REQ_set1_signature_algo(req: ?*X509_REQ, algo: [*c]const X509_ALGOR) c_int;
@@ -3687,11 +3687,11 @@ pub extern fn X509_ALGOR_set_md(alg: [*c]X509_ALGOR, md: ?*const EVP_MD) void;
pub extern fn X509_ALGOR_cmp(a: [*c]const X509_ALGOR, b: [*c]const X509_ALGOR) c_int;
pub extern fn X509_signature_dump(bio: [*c]BIO, sig: [*c]const ASN1_STRING, indent: c_int) c_int;
pub extern fn X509_signature_print(bio: [*c]BIO, alg: [*c]const X509_ALGOR, sig: [*c]const ASN1_STRING) c_int;
pub extern fn X509_pubkey_digest(x509: ?*const X509, md: ?*const EVP_MD, out: [*c]u8, out_len: [*c]c_uint) c_int;
pub extern fn X509_digest(x509: ?*const X509, md: ?*const EVP_MD, out: [*c]u8, out_len: [*c]c_uint) c_int;
pub extern fn X509_CRL_digest(crl: ?*const X509_CRL, md: ?*const EVP_MD, out: [*c]u8, out_len: [*c]c_uint) c_int;
pub extern fn X509_REQ_digest(req: ?*const X509_REQ, md: ?*const EVP_MD, out: [*c]u8, out_len: [*c]c_uint) c_int;
pub extern fn X509_NAME_digest(name: ?*const X509_NAME, md: ?*const EVP_MD, out: [*c]u8, out_len: [*c]c_uint) c_int;
pub extern fn X509_pubkey_digest(x509: ?*const X509, md: ?*const EVP_MD, out: [*]u8, out_len: [*c]c_uint) c_int;
pub extern fn X509_digest(x509: ?*const X509, md: ?*const EVP_MD, out: [*]u8, out_len: [*c]c_uint) c_int;
pub extern fn X509_CRL_digest(crl: ?*const X509_CRL, md: ?*const EVP_MD, out: [*]u8, out_len: [*c]c_uint) c_int;
pub extern fn X509_REQ_digest(req: ?*const X509_REQ, md: ?*const EVP_MD, out: [*]u8, out_len: [*c]c_uint) c_int;
pub extern fn X509_NAME_digest(name: ?*const X509_NAME, md: ?*const EVP_MD, out: [*]u8, out_len: [*c]c_uint) c_int;
pub extern fn d2i_X509_bio(bp: [*c]BIO, x509: [*c]?*X509) ?*X509;
pub extern fn d2i_X509_CRL_bio(bp: [*c]BIO, crl: [*c]?*X509_CRL) ?*X509_CRL;
pub extern fn d2i_X509_REQ_bio(bp: [*c]BIO, req: [*c]?*X509_REQ) ?*X509_REQ;
@@ -3719,8 +3719,8 @@ pub extern fn i2d_EC_PUBKEY_bio(bp: [*c]BIO, eckey: ?*EC_KEY) c_int;
pub extern fn i2d_ECPrivateKey_bio(bp: [*c]BIO, eckey: ?*EC_KEY) c_int;
pub extern fn i2d_PKCS8_bio(bp: [*c]BIO, p8: ?*X509_SIG) c_int;
pub extern fn i2d_PKCS8_PRIV_KEY_INFO_bio(bp: [*c]BIO, p8inf: ?*PKCS8_PRIV_KEY_INFO) c_int;
pub extern fn i2d_PrivateKey_bio(bp: [*c]BIO, pkey: [*c]EVP_PKEY) c_int;
pub extern fn i2d_PUBKEY_bio(bp: [*c]BIO, pkey: [*c]EVP_PKEY) c_int;
pub extern fn i2d_PrivateKey_bio(bp: [*c]BIO, pkey: *EVP_PKEY) c_int;
pub extern fn i2d_PUBKEY_bio(bp: [*c]BIO, pkey: *EVP_PKEY) c_int;
pub extern fn i2d_DHparams_bio(bp: [*c]BIO, dh: ?*const DH) c_int;
pub extern fn i2d_PKCS8PrivateKeyInfo_bio(bp: [*c]BIO, key: [*c]EVP_PKEY) c_int;
// pub extern fn d2i_X509_fp(fp: [*c]FILE, x509: [*c]?*X509) ?*X509;
@@ -3750,8 +3750,8 @@ pub extern fn i2d_PKCS8PrivateKeyInfo_bio(bp: [*c]BIO, key: [*c]EVP_PKEY) c_int;
// pub extern fn i2d_PKCS8_fp(fp: [*c]FILE, p8: ?*X509_SIG) c_int;
// pub extern fn i2d_PKCS8_PRIV_KEY_INFO_fp(fp: [*c]FILE, p8inf: ?*PKCS8_PRIV_KEY_INFO) c_int;
// pub extern fn i2d_PKCS8PrivateKeyInfo_fp(fp: [*c]FILE, key: [*c]EVP_PKEY) c_int;
// pub extern fn i2d_PrivateKey_fp(fp: [*c]FILE, pkey: [*c]EVP_PKEY) c_int;
// pub extern fn i2d_PUBKEY_fp(fp: [*c]FILE, pkey: [*c]EVP_PKEY) c_int;
// pub extern fn i2d_PrivateKey_fp(fp: [*c]FILE, pkey: *EVP_PKEY) c_int;
// pub extern fn i2d_PUBKEY_fp(fp: [*c]FILE, pkey: *EVP_PKEY) c_int;
pub extern fn X509_NAME_get_text_by_OBJ(name: ?*const X509_NAME, obj: ?*const ASN1_OBJECT, buf: [*c]u8, len: c_int) c_int;
pub extern fn X509_NAME_get_text_by_NID(name: ?*const X509_NAME, nid: c_int, buf: [*c]u8, len: c_int) c_int;
pub const struct_stack_st_X509_ATTRIBUTE = opaque {};
@@ -4223,15 +4223,15 @@ pub extern fn X509_get_pathlen(x509: ?*X509) c_long;
pub extern fn X509_SIG_get0(sig: ?*const X509_SIG, out_alg: [*c][*c]const X509_ALGOR, out_digest: [*c][*c]const ASN1_OCTET_STRING) void;
pub extern fn X509_SIG_getm(sig: ?*X509_SIG, out_alg: [*c][*c]X509_ALGOR, out_digest: [*c][*c]ASN1_OCTET_STRING) void;
pub extern fn X509_verify_cert_error_string(err: c_long) [*c]const u8;
pub extern fn X509_verify(x509: ?*X509, pkey: [*c]EVP_PKEY) c_int;
pub extern fn X509_REQ_verify(req: ?*X509_REQ, pkey: [*c]EVP_PKEY) c_int;
pub extern fn X509_CRL_verify(crl: ?*X509_CRL, pkey: [*c]EVP_PKEY) c_int;
pub extern fn NETSCAPE_SPKI_verify(spki: [*c]NETSCAPE_SPKI, pkey: [*c]EVP_PKEY) c_int;
pub extern fn X509_verify(x509: ?*X509, pkey: *EVP_PKEY) c_int;
pub extern fn X509_REQ_verify(req: ?*X509_REQ, pkey: *EVP_PKEY) c_int;
pub extern fn X509_CRL_verify(crl: ?*X509_CRL, pkey: *EVP_PKEY) c_int;
pub extern fn NETSCAPE_SPKI_verify(spki: [*c]NETSCAPE_SPKI, pkey: *EVP_PKEY) c_int;
pub extern fn NETSCAPE_SPKI_b64_decode(str: [*c]const u8, len: c_int) [*c]NETSCAPE_SPKI;
pub extern fn NETSCAPE_SPKI_b64_encode(spki: [*c]NETSCAPE_SPKI) [*c]u8;
pub extern fn NETSCAPE_SPKI_get_pubkey(spki: [*c]NETSCAPE_SPKI) [*c]EVP_PKEY;
pub extern fn NETSCAPE_SPKI_set_pubkey(spki: [*c]NETSCAPE_SPKI, pkey: [*c]EVP_PKEY) c_int;
pub extern fn NETSCAPE_SPKI_sign(spki: [*c]NETSCAPE_SPKI, pkey: [*c]EVP_PKEY, md: ?*const EVP_MD) c_int;
pub extern fn NETSCAPE_SPKI_set_pubkey(spki: [*c]NETSCAPE_SPKI, pkey: *EVP_PKEY) c_int;
pub extern fn NETSCAPE_SPKI_sign(spki: [*c]NETSCAPE_SPKI, pkey: *EVP_PKEY, md: ?*const EVP_MD) c_int;
pub extern fn X509_ATTRIBUTE_dup(xa: ?*const X509_ATTRIBUTE) ?*X509_ATTRIBUTE;
pub extern fn X509_REVOKED_dup(rev: ?*const X509_REVOKED) ?*X509_REVOKED;
pub extern fn X509_cmp_time(s: [*c]const ASN1_TIME, t: [*c]time_t) c_int;
@@ -4250,7 +4250,7 @@ pub extern fn X509_PUBKEY_free(a: ?*X509_PUBKEY) void;
pub extern fn d2i_X509_PUBKEY(a: [*c]?*X509_PUBKEY, in: [*c][*c]const u8, len: c_long) ?*X509_PUBKEY;
pub extern fn i2d_X509_PUBKEY(a: ?*const X509_PUBKEY, out: [*c][*c]u8) c_int;
pub extern const X509_PUBKEY_it: ASN1_ITEM;
pub extern fn X509_PUBKEY_set(x: [*c]?*X509_PUBKEY, pkey: [*c]EVP_PKEY) c_int;
pub extern fn X509_PUBKEY_set(x: [*c]?*X509_PUBKEY, pkey: *EVP_PKEY) c_int;
pub extern fn X509_PUBKEY_get(key: ?*X509_PUBKEY) [*c]EVP_PKEY;
pub extern fn X509_SIG_new() ?*X509_SIG;
pub extern fn X509_SIG_free(a: ?*X509_SIG) void;
@@ -4293,8 +4293,8 @@ pub extern fn X509_INFO_free(a: [*c]X509_INFO) void;
pub extern fn X509_NAME_oneline(a: ?*const X509_NAME, buf: [*c]u8, size: c_int) [*c]u8;
pub extern fn ASN1_digest(i2d: ?*const i2d_of_void, @"type": ?*const EVP_MD, data: [*c]u8, md: [*c]u8, len: [*c]c_uint) c_int;
pub extern fn ASN1_item_digest(it: ?*const ASN1_ITEM, @"type": ?*const EVP_MD, data: ?*anyopaque, md: [*c]u8, len: [*c]c_uint) c_int;
pub extern fn ASN1_item_verify(it: ?*const ASN1_ITEM, algor1: [*c]const X509_ALGOR, signature: [*c]const ASN1_BIT_STRING, data: ?*anyopaque, pkey: [*c]EVP_PKEY) c_int;
pub extern fn ASN1_item_sign(it: ?*const ASN1_ITEM, algor1: [*c]X509_ALGOR, algor2: [*c]X509_ALGOR, signature: [*c]ASN1_BIT_STRING, data: ?*anyopaque, pkey: [*c]EVP_PKEY, @"type": ?*const EVP_MD) c_int;
pub extern fn ASN1_item_verify(it: ?*const ASN1_ITEM, algor1: [*c]const X509_ALGOR, signature: [*c]const ASN1_BIT_STRING, data: ?*anyopaque, pkey: *EVP_PKEY) c_int;
pub extern fn ASN1_item_sign(it: ?*const ASN1_ITEM, algor1: [*c]X509_ALGOR, algor2: [*c]X509_ALGOR, signature: [*c]ASN1_BIT_STRING, data: ?*anyopaque, pkey: *EVP_PKEY, @"type": ?*const EVP_MD) c_int;
pub extern fn ASN1_item_sign_ctx(it: ?*const ASN1_ITEM, algor1: [*c]X509_ALGOR, algor2: [*c]X509_ALGOR, signature: [*c]ASN1_BIT_STRING, asn: ?*anyopaque, ctx: [*c]EVP_MD_CTX) c_int;
pub extern fn X509_REQ_extension_nid(nid: c_int) c_int;
pub extern fn X509_REQ_get_extensions(req: ?*X509_REQ) ?*struct_stack_st_X509_EXTENSION;
@@ -4316,8 +4316,8 @@ pub extern fn X509_REVOKED_get0_revocationDate(revoked: ?*const X509_REVOKED) [*
pub extern fn X509_REVOKED_set_revocationDate(revoked: ?*X509_REVOKED, tm: [*c]const ASN1_TIME) c_int;
pub extern fn X509_REVOKED_get0_extensions(r: ?*const X509_REVOKED) ?*const struct_stack_st_X509_EXTENSION;
pub extern fn X509_CRL_diff(base: ?*X509_CRL, newer: ?*X509_CRL, skey: [*c]EVP_PKEY, md: ?*const EVP_MD, flags: c_uint) ?*X509_CRL;
pub extern fn X509_REQ_check_private_key(x509: ?*X509_REQ, pkey: [*c]EVP_PKEY) c_int;
pub extern fn X509_check_private_key(x509: ?*X509, pkey: [*c]const EVP_PKEY) c_int;
pub extern fn X509_REQ_check_private_key(x509: ?*X509_REQ, pkey: *EVP_PKEY) c_int;
pub extern fn X509_check_private_key(x509: ?*X509, pkey: ?*const EVP_PKEY) c_int;
pub extern fn X509_issuer_name_cmp(a: ?*const X509, b: ?*const X509) c_int;
pub extern fn X509_issuer_name_hash(a: ?*X509) c_ulong;
pub extern fn X509_subject_name_cmp(a: ?*const X509, b: ?*const X509) c_int;
@@ -4380,7 +4380,7 @@ pub extern fn d2i_PKCS8_PRIV_KEY_INFO(a: [*c]?*PKCS8_PRIV_KEY_INFO, in: [*c][*c]
pub extern fn i2d_PKCS8_PRIV_KEY_INFO(a: ?*const PKCS8_PRIV_KEY_INFO, out: [*c][*c]u8) c_int;
pub extern const PKCS8_PRIV_KEY_INFO_it: ASN1_ITEM;
pub extern fn EVP_PKCS82PKEY(p8: ?*const PKCS8_PRIV_KEY_INFO) [*c]EVP_PKEY;
pub extern fn EVP_PKEY2PKCS8(pkey: [*c]const EVP_PKEY) ?*PKCS8_PRIV_KEY_INFO;
pub extern fn EVP_PKEY2PKCS8(pkey: *const EVP_PKEY) ?*PKCS8_PRIV_KEY_INFO;
pub extern fn X509_PUBKEY_set0_param(@"pub": ?*X509_PUBKEY, obj: ?*ASN1_OBJECT, param_type: c_int, param_value: ?*anyopaque, key: [*c]u8, key_len: c_int) c_int;
pub extern fn X509_PUBKEY_get0_param(out_obj: [*c]?*ASN1_OBJECT, out_key: [*c][*c]const u8, out_key_len: [*c]c_int, out_alg: [*c][*c]X509_ALGOR, @"pub": ?*X509_PUBKEY) c_int;
pub extern fn X509_PUBKEY_get0_public_key(@"pub": ?*const X509_PUBKEY) [*c]const ASN1_BIT_STRING;
@@ -5042,8 +5042,8 @@ pub extern fn HMAC_CTX_cleanup(ctx: [*c]HMAC_CTX) void;
pub extern fn HMAC_CTX_cleanse(ctx: [*c]HMAC_CTX) void;
pub extern fn HMAC_CTX_free(ctx: [*c]HMAC_CTX) void;
pub extern fn HMAC_Init_ex(ctx: [*c]HMAC_CTX, key: ?*const anyopaque, key_len: usize, md: ?*const EVP_MD, impl: ?*ENGINE) c_int;
pub extern fn HMAC_Update(ctx: [*c]HMAC_CTX, data: [*c]const u8, data_len: usize) c_int;
pub extern fn HMAC_Final(ctx: [*c]HMAC_CTX, out: [*c]u8, out_len: [*c]c_uint) c_int;
pub extern fn HMAC_Update(ctx: [*c]HMAC_CTX, data: [*]const u8, data_len: usize) c_int;
pub extern fn HMAC_Final(ctx: [*c]HMAC_CTX, out: [*]u8, out_len: [*c]c_uint) c_int;
pub extern fn HMAC_size(ctx: [*c]const HMAC_CTX) usize;
pub extern fn HMAC_CTX_get_md(ctx: [*c]const HMAC_CTX) ?*const EVP_MD;
pub extern fn HMAC_CTX_copy_ex(dest: [*c]HMAC_CTX, src: [*c]const HMAC_CTX) c_int;
@@ -5118,8 +5118,8 @@ pub extern fn SSL_get_mode(ssl: ?*const SSL) u32;
pub extern fn SSL_CTX_set0_buffer_pool(ctx: ?*SSL_CTX, pool: ?*CRYPTO_BUFFER_POOL) void;
pub extern fn SSL_CTX_use_certificate(ctx: ?*SSL_CTX, x509: ?*X509) c_int;
pub extern fn SSL_use_certificate(ssl: ?*SSL, x509: ?*X509) c_int;
pub extern fn SSL_CTX_use_PrivateKey(ctx: ?*SSL_CTX, pkey: [*c]EVP_PKEY) c_int;
pub extern fn SSL_use_PrivateKey(ssl: ?*SSL, pkey: [*c]EVP_PKEY) c_int;
pub extern fn SSL_CTX_use_PrivateKey(ctx: ?*SSL_CTX, pkey: *EVP_PKEY) c_int;
pub extern fn SSL_use_PrivateKey(ssl: ?*SSL, pkey: *EVP_PKEY) c_int;
pub extern fn SSL_CTX_set0_chain(ctx: ?*SSL_CTX, chain: ?*struct_stack_st_X509) c_int;
pub extern fn SSL_CTX_set1_chain(ctx: ?*SSL_CTX, chain: ?*struct_stack_st_X509) c_int;
pub extern fn SSL_set0_chain(ssl: ?*SSL, chain: ?*struct_stack_st_X509) c_int;
@@ -5327,14 +5327,14 @@ pub extern fn SSL_get_peer_certificate(ssl: ?*const SSL) ?*X509;
pub extern fn SSL_get_peer_cert_chain(ssl: ?*const SSL) ?*struct_stack_st_X509;
pub extern fn SSL_get_peer_full_cert_chain(ssl: ?*const SSL) ?*struct_stack_st_X509;
pub extern fn SSL_get0_peer_certificates(ssl: ?*const SSL) ?*const struct_stack_st_CRYPTO_BUFFER;
pub extern fn SSL_get0_signed_cert_timestamp_list(ssl: ?*const SSL, out: [*c][*c]const u8, out_len: [*c]usize) void;
pub extern fn SSL_get0_ocsp_response(ssl: ?*const SSL, out: [*c][*c]const u8, out_len: [*c]usize) void;
pub extern fn SSL_get_tls_unique(ssl: ?*const SSL, out: [*c]u8, out_len: [*c]usize, max_out: usize) c_int;
pub extern fn SSL_get0_signed_cert_timestamp_list(ssl: ?*const SSL, out: [*c][*c]const u8, out_len: *usize) void;
pub extern fn SSL_get0_ocsp_response(ssl: ?*const SSL, out: [*c][*c]const u8, out_len: *usize) void;
pub extern fn SSL_get_tls_unique(ssl: ?*const SSL, out: [*]u8, out_len: *usize, max_out: usize) c_int;
pub extern fn SSL_get_extms_support(ssl: ?*const SSL) c_int;
pub extern fn SSL_get_current_cipher(ssl: ?*const SSL) ?*const SSL_CIPHER;
pub extern fn SSL_session_reused(ssl: ?*const SSL) c_int;
pub extern fn SSL_get_secure_renegotiation_support(ssl: ?*const SSL) c_int;
pub extern fn SSL_export_keying_material(ssl: ?*SSL, out: [*c]u8, out_len: usize, label: [*c]const u8, label_len: usize, context: [*c]const u8, context_len: usize, use_context: c_int) c_int;
pub extern fn SSL_export_keying_material(ssl: ?*SSL, out: [*]u8, out_len: usize, label: [*c]const u8, label_len: usize, context: [*c]const u8, context_len: usize, use_context: c_int) c_int;
pub extern fn PEM_read_bio_SSL_SESSION(bp: [*c]BIO, x: [*c]?*SSL_SESSION, cb: ?*const pem_password_cb, u: ?*anyopaque) ?*SSL_SESSION;
// pub extern fn PEM_read_SSL_SESSION(fp: [*c]FILE, x: [*c]?*SSL_SESSION, cb: ?*const pem_password_cb, u: ?*anyopaque) ?*SSL_SESSION;
pub extern fn PEM_write_bio_SSL_SESSION(bp: [*c]BIO, x: ?*SSL_SESSION) c_int;
@@ -5342,8 +5342,8 @@ pub extern fn PEM_write_bio_SSL_SESSION(bp: [*c]BIO, x: ?*SSL_SESSION) c_int;
pub extern fn SSL_SESSION_new(ctx: ?*const SSL_CTX) ?*SSL_SESSION;
pub extern fn SSL_SESSION_up_ref(session: ?*SSL_SESSION) c_int;
pub extern fn SSL_SESSION_free(session: ?*SSL_SESSION) void;
pub extern fn SSL_SESSION_to_bytes(in: ?*const SSL_SESSION, out_data: [*c][*c]u8, out_len: [*c]usize) c_int;
pub extern fn SSL_SESSION_to_bytes_for_ticket(in: ?*const SSL_SESSION, out_data: [*c][*c]u8, out_len: [*c]usize) c_int;
pub extern fn SSL_SESSION_to_bytes(in: ?*const SSL_SESSION, out_data: [*c][*c]u8, out_len: *usize) c_int;
pub extern fn SSL_SESSION_to_bytes_for_ticket(in: ?*const SSL_SESSION, out_data: [*c][*c]u8, out_len: *usize) c_int;
pub extern fn SSL_SESSION_from_bytes(in: [*c]const u8, in_len: usize, ctx: ?*const SSL_CTX) ?*SSL_SESSION;
pub extern fn SSL_SESSION_get_version(session: ?*const SSL_SESSION) [*c]const u8;
pub extern fn SSL_SESSION_get_protocol_version(session: ?*const SSL_SESSION) u16;
@@ -5354,9 +5354,9 @@ pub extern fn SSL_SESSION_get_time(session: ?*const SSL_SESSION) u64;
pub extern fn SSL_SESSION_get_timeout(session: ?*const SSL_SESSION) u32;
pub extern fn SSL_SESSION_get0_peer(session: ?*const SSL_SESSION) ?*X509;
pub extern fn SSL_SESSION_get0_peer_certificates(session: ?*const SSL_SESSION) ?*const struct_stack_st_CRYPTO_BUFFER;
pub extern fn SSL_SESSION_get0_signed_cert_timestamp_list(session: ?*const SSL_SESSION, out: [*c][*c]const u8, out_len: [*c]usize) void;
pub extern fn SSL_SESSION_get0_ocsp_response(session: ?*const SSL_SESSION, out: [*c][*c]const u8, out_len: [*c]usize) void;
pub extern fn SSL_SESSION_get_master_key(session: ?*const SSL_SESSION, out: [*c]u8, max_out: usize) usize;
pub extern fn SSL_SESSION_get0_signed_cert_timestamp_list(session: ?*const SSL_SESSION, out: [*c][*c]const u8, out_len: *usize) void;
pub extern fn SSL_SESSION_get0_ocsp_response(session: ?*const SSL_SESSION, out: [*c][*c]const u8, out_len: *usize) void;
pub extern fn SSL_SESSION_get_master_key(session: ?*const SSL_SESSION, out: [*]u8, max_out: usize) usize;
pub extern fn SSL_SESSION_set_time(session: ?*SSL_SESSION, time: u64) u64;
pub extern fn SSL_SESSION_set_timeout(session: ?*SSL_SESSION, timeout: u32) u32;
pub extern fn SSL_SESSION_get0_id_context(session: ?*const SSL_SESSION, out_len: [*c]c_uint) [*c]const u8;
@@ -5364,12 +5364,12 @@ pub extern fn SSL_SESSION_set1_id_context(session: ?*SSL_SESSION, sid_ctx: [*c]c
pub extern fn SSL_SESSION_should_be_single_use(session: ?*const SSL_SESSION) c_int;
pub extern fn SSL_SESSION_is_resumable(session: ?*const SSL_SESSION) c_int;
pub extern fn SSL_SESSION_has_ticket(session: ?*const SSL_SESSION) c_int;
pub extern fn SSL_SESSION_get0_ticket(session: ?*const SSL_SESSION, out_ticket: [*c][*c]const u8, out_len: [*c]usize) void;
pub extern fn SSL_SESSION_get0_ticket(session: ?*const SSL_SESSION, out_ticket: [*c][*c]const u8, out_len: *usize) void;
pub extern fn SSL_SESSION_set_ticket(session: ?*SSL_SESSION, ticket: [*c]const u8, ticket_len: usize) c_int;
pub extern fn SSL_SESSION_get_ticket_lifetime_hint(session: ?*const SSL_SESSION) u32;
pub extern fn SSL_SESSION_get0_cipher(session: ?*const SSL_SESSION) ?*const SSL_CIPHER;
pub extern fn SSL_SESSION_has_peer_sha256(session: ?*const SSL_SESSION) c_int;
pub extern fn SSL_SESSION_get0_peer_sha256(session: ?*const SSL_SESSION, out_ptr: [*c][*c]const u8, out_len: [*c]usize) void;
pub extern fn SSL_SESSION_get0_peer_sha256(session: ?*const SSL_SESSION, out_ptr: [*c][*c]const u8, out_len: *usize) void;
pub extern fn SSL_CTX_set_session_cache_mode(ctx: ?*SSL_CTX, mode: c_int) c_int;
pub extern fn SSL_CTX_get_session_cache_mode(ctx: ?*const SSL_CTX) c_int;
pub extern fn SSL_set_session(ssl: ?*SSL, session: ?*SSL_SESSION) c_int;
@@ -5378,7 +5378,7 @@ pub extern fn SSL_CTX_set_session_psk_dhe_timeout(ctx: ?*SSL_CTX, timeout: u32)
pub extern fn SSL_CTX_get_timeout(ctx: ?*const SSL_CTX) u32;
pub extern fn SSL_CTX_set_session_id_context(ctx: ?*SSL_CTX, sid_ctx: [*c]const u8, sid_ctx_len: usize) c_int;
pub extern fn SSL_set_session_id_context(ssl: ?*SSL, sid_ctx: [*c]const u8, sid_ctx_len: usize) c_int;
pub extern fn SSL_get0_session_id_context(ssl: ?*const SSL, out_len: [*c]usize) [*c]const u8;
pub extern fn SSL_get0_session_id_context(ssl: ?*const SSL, out_len: *usize) [*c]const u8;
pub extern fn SSL_CTX_sess_set_cache_size(ctx: ?*SSL_CTX, size: c_ulong) c_ulong;
pub extern fn SSL_CTX_sess_get_cache_size(ctx: ?*const SSL_CTX) c_ulong;
pub extern fn SSL_CTX_sess_number(ctx: ?*const SSL_CTX) usize;
@@ -5476,7 +5476,7 @@ pub extern fn SSL_CTX_set_alpn_select_cb(ctx: ?*SSL_CTX, cb: ?*const fn (?*SSL,
pub extern fn SSL_get0_alpn_selected(ssl: ?*const SSL, out_data: [*c][*c]const u8, out_len: [*c]c_uint) void;
pub extern fn SSL_CTX_set_allow_unknown_alpn_protos(ctx: ?*SSL_CTX, enabled: c_int) void;
pub extern fn SSL_add_application_settings(ssl: ?*SSL, proto: [*c]const u8, proto_len: usize, settings: [*c]const u8, settings_len: usize) c_int;
pub extern fn SSL_get0_peer_application_settings(ssl: ?*const SSL, out_data: [*c][*c]const u8, out_len: [*c]usize) void;
pub extern fn SSL_get0_peer_application_settings(ssl: ?*const SSL, out_data: [*c][*c]const u8, out_len: *usize) void;
pub extern fn SSL_has_application_settings(ssl: ?*const SSL) c_int;
pub const ssl_cert_compression_func_t = ?*const fn (?*SSL, ?*CBB, [*c]const u8, usize) callconv(.C) c_int;
pub const ssl_cert_decompression_func_t = ?*const fn (?*SSL, [*c]?*CRYPTO_BUFFER, usize, [*c]const u8, usize) callconv(.C) c_int;
@@ -5489,7 +5489,7 @@ pub extern fn SSL_CTX_set_tls_channel_id_enabled(ctx: ?*SSL_CTX, enabled: c_int)
pub extern fn SSL_set_tls_channel_id_enabled(ssl: ?*SSL, enabled: c_int) void;
pub extern fn SSL_CTX_set1_tls_channel_id(ctx: ?*SSL_CTX, private_key: [*c]EVP_PKEY) c_int;
pub extern fn SSL_set1_tls_channel_id(ssl: ?*SSL, private_key: [*c]EVP_PKEY) c_int;
pub extern fn SSL_get_tls_channel_id(ssl: ?*SSL, out: [*c]u8, max_out: usize) usize;
pub extern fn SSL_get_tls_channel_id(ssl: ?*SSL, out: [*]u8, max_out: usize) usize;
pub const struct_stack_st_SRTP_PROTECTION_PROFILE = opaque {};
pub const sk_SRTP_PROTECTION_PROFILE_free_func = ?*const fn ([*c]const SRTP_PROTECTION_PROFILE) callconv(.C) void;
pub const sk_SRTP_PROTECTION_PROFILE_copy_func = ?*const fn ([*c]const SRTP_PROTECTION_PROFILE) callconv(.C) [*c]const SRTP_PROTECTION_PROFILE;
@@ -5617,7 +5617,7 @@ pub extern fn SSL_CTX_use_psk_identity_hint(ctx: ?*SSL_CTX, identity_hint: [*c]c
pub extern fn SSL_use_psk_identity_hint(ssl: ?*SSL, identity_hint: [*c]const u8) c_int;
pub extern fn SSL_get_psk_identity_hint(ssl: ?*const SSL) [*c]const u8;
pub extern fn SSL_get_psk_identity(ssl: ?*const SSL) [*c]const u8;
pub extern fn SSL_set1_delegated_credential(ssl: ?*SSL, dc: ?*CRYPTO_BUFFER, pkey: [*c]EVP_PKEY, key_method: [*c]const SSL_PRIVATE_KEY_METHOD) c_int;
pub extern fn SSL_set1_delegated_credential(ssl: ?*SSL, dc: ?*CRYPTO_BUFFER, pkey: *EVP_PKEY, key_method: [*c]const SSL_PRIVATE_KEY_METHOD) c_int;
pub extern fn SSL_delegated_credential_used(ssl: ?*const SSL) c_int;
pub extern fn SSL_quic_max_handshake_flight_len(ssl: ?*const SSL, level: enum_ssl_encryption_level_t) usize;
pub extern fn SSL_quic_read_level(ssl: ?*const SSL) enum_ssl_encryption_level_t;
@@ -5660,13 +5660,13 @@ pub extern fn SSL_set_enable_ech_grease(ssl: ?*SSL, enable: c_int) void;
pub extern fn SSL_set1_ech_config_list(ssl: ?*SSL, ech_config_list: [*c]const u8, ech_config_list_len: usize) c_int;
pub extern fn SSL_get0_ech_name_override(ssl: ?*const SSL, out_name: [*c][*c]const u8, out_name_len: [*c]usize) void;
pub extern fn SSL_get0_ech_retry_configs(ssl: ?*const SSL, out_retry_configs: [*c][*c]const u8, out_retry_configs_len: [*c]usize) void;
pub extern fn SSL_marshal_ech_config(out: [*c][*c]u8, out_len: [*c]usize, config_id: u8, key: ?*const EVP_HPKE_KEY, public_name: [*c]const u8, max_name_len: usize) c_int;
pub extern fn SSL_marshal_ech_config(out: [*c][*c]u8, out_len: *usize, config_id: u8, key: ?*const EVP_HPKE_KEY, public_name: [*c]const u8, max_name_len: usize) c_int;
pub extern fn SSL_ECH_KEYS_new() ?*SSL_ECH_KEYS;
pub extern fn SSL_ECH_KEYS_up_ref(keys: ?*SSL_ECH_KEYS) void;
pub extern fn SSL_ECH_KEYS_free(keys: ?*SSL_ECH_KEYS) void;
pub extern fn SSL_ECH_KEYS_add(keys: ?*SSL_ECH_KEYS, is_retry_config: c_int, ech_config: [*c]const u8, ech_config_len: usize, key: ?*const EVP_HPKE_KEY) c_int;
pub extern fn SSL_ECH_KEYS_has_duplicate_config_id(keys: ?*const SSL_ECH_KEYS) c_int;
pub extern fn SSL_ECH_KEYS_marshal_retry_configs(keys: ?*const SSL_ECH_KEYS, out: [*c][*c]u8, out_len: [*c]usize) c_int;
pub extern fn SSL_ECH_KEYS_marshal_retry_configs(keys: ?*const SSL_ECH_KEYS, out: [*c][*c]u8, out_len: *usize) c_int;
pub extern fn SSL_CTX_set1_ech_keys(ctx: ?*SSL_CTX, keys: ?*SSL_ECH_KEYS) c_int;
pub extern fn SSL_ech_accepted(ssl: ?*const SSL) c_int;
pub extern fn SSL_alert_type_string_long(value: c_int) [*c]const u8;
@@ -5683,7 +5683,7 @@ pub extern fn SSL_CTX_get_ex_data(ctx: ?*const SSL_CTX, idx: c_int) ?*anyopaque;
pub extern fn SSL_CTX_get_ex_new_index(argl: c_long, argp: ?*anyopaque, unused: [*c]CRYPTO_EX_unused, dup_unused: ?*const CRYPTO_EX_dup, free_func: ?*const CRYPTO_EX_free) c_int;
pub extern fn SSL_get_ivs(ssl: ?*const SSL, out_read_iv: [*c][*c]const u8, out_write_iv: [*c][*c]const u8, out_iv_len: [*c]usize) c_int;
pub extern fn SSL_get_key_block_len(ssl: ?*const SSL) usize;
pub extern fn SSL_generate_key_block(ssl: ?*const SSL, out: [*c]u8, out_len: usize) c_int;
pub extern fn SSL_generate_key_block(ssl: ?*const SSL, out: [*]u8, out_len: usize) c_int;
pub extern fn SSL_get_read_sequence(ssl: ?*const SSL) u64;
pub extern fn SSL_get_write_sequence(ssl: ?*const SSL) u64;
pub extern fn SSL_CTX_set_record_protocol_version(ctx: ?*SSL_CTX, version: c_int) c_int;
@@ -5719,7 +5719,7 @@ pub const ssl_select_cert_success: c_int = 1;
pub const ssl_select_cert_retry: c_int = 0;
pub const ssl_select_cert_error: c_int = -1;
pub const enum_ssl_select_cert_result_t = c_int;
pub extern fn SSL_early_callback_ctx_extension_get(client_hello: [*c]const SSL_CLIENT_HELLO, extension_type: u16, out_data: [*c][*c]const u8, out_len: [*c]usize) c_int;
pub extern fn SSL_early_callback_ctx_extension_get(client_hello: [*c]const SSL_CLIENT_HELLO, extension_type: u16, out_data: [*c][*c]const u8, out_len: *usize) c_int;
pub extern fn SSL_CTX_set_select_certificate_cb(ctx: ?*SSL_CTX, cb: ?*const fn ([*c]const SSL_CLIENT_HELLO) callconv(.C) enum_ssl_select_cert_result_t) void;
pub extern fn SSL_CTX_set_dos_protection_cb(ctx: ?*SSL_CTX, cb: ?*const fn ([*c]const SSL_CLIENT_HELLO) callconv(.C) c_int) void;
pub extern fn SSL_CTX_set_reverify_on_resume(ctx: ?*SSL_CTX, enabled: c_int) void;
@@ -5732,8 +5732,8 @@ pub extern fn SSL_get_info_callback(ssl: ?*const SSL) ?*const fn (?*const SSL, c
pub extern fn SSL_state_string_long(ssl: ?*const SSL) [*c]const u8;
pub extern fn SSL_get_shutdown(ssl: ?*const SSL) c_int;
pub extern fn SSL_get_peer_signature_algorithm(ssl: ?*const SSL) u16;
pub extern fn SSL_get_client_random(ssl: ?*const SSL, out: [*c]u8, max_out: usize) usize;
pub extern fn SSL_get_server_random(ssl: ?*const SSL, out: [*c]u8, max_out: usize) usize;
pub extern fn SSL_get_client_random(ssl: ?*const SSL, out: [*]u8, max_out: usize) usize;
pub extern fn SSL_get_server_random(ssl: ?*const SSL, out: [*]u8, max_out: usize) usize;
pub extern fn SSL_get_pending_cipher(ssl: ?*const SSL) ?*const SSL_CIPHER;
pub extern fn SSL_set_retain_only_sha256_of_client_certs(ssl: ?*SSL, enable: c_int) void;
pub extern fn SSL_CTX_set_retain_only_sha256_of_client_certs(ctx: ?*SSL_CTX, enable: c_int) void;

View File

@@ -14,6 +14,7 @@ pub const C = @import("./bun.js/javascript_core_c_api.zig");
pub const WebCore = @import("./bun.js/webcore.zig");
pub const BuildMessage = @import("./bun.js/BuildMessage.zig").BuildMessage;
pub const ResolveMessage = @import("./bun.js/ResolveMessage.zig").ResolveMessage;
pub const Cloudflare = struct {
pub const HTMLRewriter = @import("./bun.js/api/html_rewriter.zig").HTMLRewriter;
pub const ContentOptions = @import("./bun.js/api/html_rewriter.zig").ContentOptions;
@@ -51,6 +52,7 @@ pub const API = struct {
pub const H2FrameParser = @import("./bun.js/api/bun/h2_frame_parser.zig").H2FrameParser;
pub const BrotliEncoder = @import("./bun.js/api/js_brotli.zig").BrotliEncoder;
pub const BrotliDecoder = @import("./bun.js/api/js_brotli.zig").BrotliDecoder;
pub const Crypto = Bun.Crypto;
};
pub const Postgres = @import("./sql/postgres.zig");
pub const DNS = @import("./bun.js/api/bun/dns_resolver.zig");