38 lines
		
	
	
		
			915 B
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			915 B
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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)
 | |
| 			]
 | |
| 		]);
 | |
| 
 | |
| 	}
 | |
| } |