🚀
【C 言語】【Zig】【PHP FFI】OpenSSL のバージョン番号を表示する
Debian であらかじめ次のパッケージがインストールされていることを前提とする
sudo apt install libssl-dev
まずは C 言語でマクロバージョンを使ってバージョン番号を表示させてみよう
#include <stdio.h>
#include <openssl/opensslv.h>
int main(int argc, char *argv[]) {
printf("%s\n", OPENSSL_VERSION_STR);
printf("%s\n", OPENSSL_VERSION_TEXT);
return 0;
}
結果は次のとおり
zig run test.c -l c -l ssl
3.0.11
OpenSSL 3.0.11 19 Sep 2023
ソースコードからコンパイルしたもののインストールしていない OpenSSL であれば、次のようにパスを指定できる
zig run test.c -l c -l ssl -L $HOME/openssl -I $HOME/openssl/include
今度は OpenSSL_version
関数で同じ結果を出力させてみよう
#include <stdio.h>
#include <openssl/crypto.h>;
int main(int argc, char *argv[]) {
printf("%s\n", OpenSSL_version(OPENSSL_VERSION_STRING));
printf("%s\n", OpenSSL_version(OPENSSL_VERSION));
return 0;
}
コンパイルと実行は次のとおり
zig run test.c -l c -l crypto
今度は Zig でマクロバージョンを書いてみよう
const std = @import("std");
const print = std.debug.print;
const OpenSSL = @cImport({
@cInclude("openssl/opensslv.h");
});
pub fn main() !void {
print("{s}\n", .{OpenSSL.OPENSSL_VERSION_STR});
print("{s}\n", .{OpenSSL.OPENSSL_VERSION_TEXT});
}
コンパイルと実行は次のとおり
zig run test.zig -lc -lssl
関数版も書いてみよう
const std = @import("std");
const print = std.debug.print;
const OpenSSL = @cImport({
@cInclude("openssl/crypto.h");
});
pub fn main() !void {
print("{s}\n", .{OpenSSL.OpenSSL_version(OpenSSL.OPENSSL_VERSION_STRING)});
print("{s}\n", .{OpenSSL.OpenSSL_version(OpenSSL.OPENSSL_VERSION)});
}
コンパイルと実行は次のとおり
zig run test.zig -lc -lcrypto
最後に PHP FFI を示す
$ffi = FFI::cdef('
unsigned int OPENSSL_version_major(void);
unsigned int OPENSSL_version_minor(void);
unsigned int OPENSSL_version_patch(void);
');
$major = $ffi->OPENSSL_version_major();
$minor = $ffi->OPENSSL_version_minor();
$patch = $ffi->OPENSSL_version_patch();;
var_dump(
$major.'.'.$minor.'.'.$patch
);
Discussion