signing infrastructure
[pharext/replicator.pharext.org] / bin / rsa-sign
1 #!/usr/bin/env php
2 <?php
3 $log = __DIR__."/../build/rsa-sign-error.log";
4
5 ini_set("error_reporting", E_ALL);
6 ini_set("display_errors", true);
7 ini_set("log_errors", true);
8 ini_set("error_log", $log);
9
10 if ($argc != 3) {
11 fprintf(STDERR, "Usage: %s <pkg name> <phar path>\n\n", basename($argv[0]));
12 exit(1);
13 }
14
15 list(, $pkg, $src) = $argv;
16 $basename = basename($src);
17 $dir = __DIR__."/../public/sigs/$pkg";
18 $key = __DIR__."/../build/replicator.key";
19
20 if (!is_dir($dir) && !mkdir($dir, 0755, true)) {
21 exit(2);
22 }
23
24 if (($pwd = getenv("REPLICATOR_PWD"))) {
25 if (!($stream = fopen("php://temp", "r+"))) {
26 exit(4);
27 }
28 fwrite($stream, $pwd);
29 rewind($stream);
30 } else {
31 $stream = STDIN;
32 }
33
34
35 $proc = proc_open("openssl dgst -sha256 -sign $key -passin fd:3 -out $dir/$basename.sig $src", [
36 ["pipe", "r"],
37 ["pipe", "w"],
38 ["file", $log, "a"],
39 $stream
40 ], $fds);
41
42 if (!is_resource($proc)) {
43 exit(3);
44 }
45
46 fclose($fds[0]);
47
48 fpassthru($fds[1]);
49 fclose($fds[1]);
50
51 exit(proc_close($proc));