, * Wõrgu Wõlurid OÜ http://ww.ee * * See koodijupp on loodud ja avalikuks tehtud 2006. aasta teisel augustil. * Kommentaarid on teretulnud. * */ Class BankLink { /* kataloog, kus hoitakse avalikke võtmeid * kujul * /webroot/osslkeys/HP/pubkey.pem * /webroot/osslkeys/EYP/pubkey.pem * /webroot/osslkeys/... * */ var $keyDir = "/webroot/osslkeys"; function BankLink() { } /* avalik funktsioon allkirjastamiseks * */ function createSignature( &$VK_a ) { $data = $this->_composeData( &$VK_a ); $pkeyid = openssl_get_privatekey( $this->_privKey() ); openssl_sign( $data, $signature, $pkeyid ); $VK_MAC = base64_encode( $signature ); openssl_free_key( $pkeyid ); return $VK_MAC; } /* avalik funktsioon allkirja kontrollimiseks * */ function verifySignature( $VK_a ) { $VK_MAC = $VK_a['VK_MAC']; $signature = base64_decode( $VK_MAC ); switch( $VK_a['VK_SERVICE'] ) { case '1101': $data = $this->_padIt( $VK_a['VK_SERVICE'] ) . $this->_padIt( $VK_a['VK_VERSION'] ) . $this->_padIt( $VK_a['VK_SND_ID'] ) . $this->_padIt( $VK_a['VK_REC_ID'] ) . $this->_padIt( $VK_a['VK_STAMP'] ) . $this->_padIt( $VK_a['VK_T_NO'] ) . $this->_padIt( $VK_a['VK_AMOUNT'] ) . $this->_padIt( $VK_a['VK_CURR'] ) . $this->_padIt( $VK_a['VK_REC_ACC'] ) . $this->_padIt( $VK_a['VK_REC_NAME'] ) . $this->_padIt( $VK_a['VK_SND_ACC'] ) . $this->_padIt( $VK_a['VK_SND_NAME'] ) . $this->_padIt( $VK_a['VK_REF'] ) . $this->_padIt( $VK_a['VK_MSG'] ) . $this->_padIt( $VK_a['VK_T_DATE'] ); break; case '1901': $data = $this->_padIt( $VK_a['VK_SERVICE'] ) . $this->_padIt( $VK_a['VK_VERSION'] ) . $this->_padIt( $VK_a['VK_SND_ID'] ) . $this->_padIt( $VK_a['VK_REC_ID'] ) . $this->_padIt( $VK_a['VK_STAMP'] ) . $this->_padIt( $VK_a['VK_REF'] ) . $this->_padIt( $VK_a['VK_MSG'] ); break; } $cert = $this->_readPubKey( $VK_a['VK_SND_ID'] ); $pubkey = openssl_get_publickey( $cert ); $out = openssl_verify( $data, $signature, $pubkey ); openssl_free_key( $pubkeyid ); return $out; } /* * sisesed abifunktsioonid * */ function _readPubKey( $VK_SND_ID = '' ) { $key_file = $this->keyDir . "/$VK_SND_ID/pubkey.pem"; $fp = fopen( $key_file, "r" ); $cert = fread( $fp, 8192 ); fclose( $fp ); return $cert; } function _composeData( &$VK_a ) { foreach( $VK_a as $data_bit ) { $data .= $this->_padIt( $data_bit ); } return $data; } function _padIt( $str = "" ) { return str_pad( strlen( $str ), 3, "0", STR_PAD_LEFT ) . $str; } /* Siia pange kaupnehe privaatvõti. eraldi failis hoida ei soovita * */ function _privKey() { return "-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQChcWz9ZJITGmrNrCNrcpH0gcr5M8x2rOueGfYCPU/z9awxZbKQ CeYzy71Bs8QZtC3drq7lmYWo776mHIopnhDsQybGZjINS5orIi3FP2e2D5iMSH20 4qV5QXaGFJjTVFwdNNQmHMMBReaNCBrwhl028fG/Lr7tSCl3s5/raYIw+wIDeQAO AoGADh4gHWyFXSwUOOYbUtlUZgcRgpdQAvDlvc81Xx7Ddh7+rtco1UW4VsEzTKKP NP0dyTLAYp1kbxCACI2oaFlFOEBYsm64dguy4RrCVl/bBcHmiEgRmAEV8YJ7GtAJ hyZPHEzbEMKvUCGCPdyIf35rTRaqkRmjX4IZzkmbbyk2QXECQQDOJ1GhwZEv1PSq BjTHObEZs48TzV4Z/AyO7gvQnVWyb4hMyBmx/0AKQn+TLi6V9hiSIefffqVfnyMy sRUXqiRDAkE9yHqTICgf51/HIWMO1JU5DJUXtmjmuL3bJZyjsByOF1klR3vInVOg JbgA0yRcGyXgnJBA0hP1ySVnms8QQGEQ6QJAMYVyb3wnl1sIBjvNaqoo98cJlKmg 8l8As0TOar+SZ+6w4DjlK0P0n0J7IQvj9vQR/5CWIbLriOfSbbfq0Uy2vwJBAJJr e7L7YzloaW6IA5fNmLoI1jXB4asWps1oluCUKmiBC8kmrQmCxu9lcSzJipCFXMQk SlyauHF9YSre6yMJAakCQQDMM4XNyq/6CJhTRg2HofLDT2LIGSmbUvQOABhPh2qU 9c37I3nMGWPrD3ggMT3bxGQzEl2rqpYV4va9iosh9ouL -----END RSA PRIVATE KEY-----"; } } ?>