aboutsummaryrefslogblamecommitdiffstats
path: root/Zotlabs/Lib/JSalmon.php
blob: 43d5f9d092809404e25b9e5d4ad343a9f7cd8a0d (plain) (tree)






























                                                                                                             
                                                       





                                                                     
<?php

namespace Zotlabs\Lib;


class JSalmon {

	static function sign($data,$key_id,$key) {

		$arr       = $data;
		$data      = json_encode($data,JSON_UNESCAPED_SLASHES);
		$data      = base64url_encode($data, false); // do not strip padding
		$data_type = 'application/x-zot+json';
		$encoding  = 'base64url';
		$algorithm = 'RSA-SHA256';

		$data = preg_replace('/\s+/','',$data);

		// precomputed base64url encoding of data_type, encoding, algorithm concatenated with periods

		$precomputed = '.' . base64url_encode($data_type,false) . '.YmFzZTY0dXJs.UlNBLVNIQTI1Ng==';

		$signature  = base64url_encode(rsa_sign($data . $precomputed, $key), false);

		return ([
			'signed'    => true,
			'data'      => $data,
			'data_type' => $data_type,
			'encoding'  => $encoding,
			'alg'       => $algorithm,
			'sigs'      => [
				'value'  => $signature,
				'key_id' => base64url_encode($key_id)
			]
		]);

	}
}