const INDEX_PACKAGE_RECIPIENT = 1;
const INDEX_PACKAGE_CONTENT = 2;
const INDEX_PACKAGE_STATUS = 3;
- const INDEX_PACKAGE_SIGNATURE = 4;
+ const INDEX_PACKAGE_HASH = 4;
/**
- * Size of the decoded data array ('status' is not included)
+ * Size of the decoded data array
*/
- const DECODED_DATA_ARRAY_SIZE = 4;
+ const DECODED_DATA_ARRAY_SIZE = 5;
/**
* Named array elements for decoded package content
const PACKAGE_DATA_RECIPIENT = 'recipient';
const PACKAGE_DATA_CONTENT = 'content';
const PACKAGE_DATA_STATUS = 'status';
- const PACKAGE_DATA_SIGNATURE = 'signature';
+ const PACKAGE_DATA_HASH = 'hash';
/**
* All package status
// Pop the entry (it should be it)
$nextData = $this->getStackInstance()->popNamed($stackerName);
- // Compare both signatures
- assert($nextData[self::PACKAGE_DATA_SIGNATURE] == $packageData[self::PACKAGE_DATA_SIGNATURE]);
+ // Compare both hashes
+ assert($nextData[self::PACKAGE_DATA_HASH] == $packageData[self::PACKAGE_DATA_HASH]);
// Temporary set the new status
$packageData[self::PACKAGE_DATA_STATUS] = $newStatus;
}
/**
- * Generates a signature for given raw package content and sender id
+ * Generates a secure hash for given raw package content and sender id
*
* @param $content Raw package data
- * @param $senderId Sender id to generate a signature for
- * @return $signature Signature as BASE64-encoded string
+ * @param $senderId Sender id to generate a hash for
+ * @return $hash Hash as hex-encoded string
*/
- private function generatePackageSignature ($content, $senderId) {
- // Hash content and sender id together, use md5() as last algo
- $hash = md5($this->getCryptoInstance()->hashString($senderId . $content, $this->getPrivateKey(), FALSE));
-
- // Encrypt the content again with the hash as a key
- $encryptedContent = $this->getCryptoInstance()->encryptString($content, $hash);
-
- // Encode it with BASE64
- $signature = base64_encode($encryptedContent);
+ private function generatePackageHash ($content, $senderId) {
+ // Hash content and sender id together, use scrypt
+ $hash = Scrypt::hashScrypt($senderId . ':' . $content . ':' . $this->getPrivateKeyHash());
// Return it
- return $signature;
+ return $hash;
}
/**
- * Checks whether the signature of given package data is 'valid', here that
+ * Checks whether the hash of given package data is 'valid', here that
* means it is the same or not.
*
* @param $decodedArray An array with 'decoded' (explode() was mostly called) data
- * @return $isSignatureValid Whether the signature is valid
- * @todo Unfinished area, signatures are currently NOT fully supported
+ * @return $isHashValid Whether the hash is valid
+ * @todo Unfinished area, hashes are currently NOT fully supported
*/
- private function isPackageSignatureValid (array $decodedArray) {
- // Generate the signature of comparing it
- $signature = $this->generatePackageSignature($decodedArray[self::INDEX_PACKAGE_CONTENT], $decodedArray[self::INDEX_PACKAGE_SENDER]);
+ private function isPackageHashValid (array $decodedArray) {
+ // Check validity
+ $isHashValid = Scrypt::checkScrypt($decodedArray[self::INDEX_PACKAGE_SENDER] . ':' . $decodedArray[self::INDEX_PACKAGE_CONTENT] . ':' . $this->getPrivateKeyHash(), $decodedArray[self::INDEX_PACKAGE_HASH]);
- // Is it the same?
- //$isSignatureValid =
- exit(__METHOD__ . ': signature=' . $signature . chr(10) . ',decodedArray=' . print_r($decodedArray, TRUE));
+ // Return it
+ //* DEBUG-DIE: */ die(__METHOD__ . ': isHashValid=' . intval($isHashValid) . chr(10) . ',decodedArray=' . print_r($decodedArray, TRUE));
+ return $isHashValid;
}
/**
self::PACKAGE_DATA_RECIPIENT => $helperInstance->getRecipientType(),
self::PACKAGE_DATA_CONTENT => $packageContent,
self::PACKAGE_DATA_STATUS => self::PACKAGE_STATUS_NEW,
- self::PACKAGE_DATA_SIGNATURE => $this->generatePackageSignature($packageContent, $this->getSessionId())
+ self::PACKAGE_DATA_HASH => $this->generatePackageHash($packageContent, $this->getSessionId())
));
// Debug message
// Assert on count (should be always 3)
assert(count($decodedArray) == self::DECODED_DATA_ARRAY_SIZE);
- // Generate the signature of comparing it
- /*
- * @todo Unsupported feature of "signed" messages commented out
- if (!$this->isPackageSignatureValid($decodedArray)) {
+ // Generate the hash of comparing it
+ if (!$this->isPackageHashValid($decodedArray)) {
// Is not valid, so throw an exception here
- exit(__METHOD__ . ':INVALID SIG! UNDER CONSTRUCTION!' . chr(10));
+ exit(__METHOD__ . ':INVALID HASH! UNDER CONSTRUCTION!' . chr(10));
} // END - if
- */
/*
- * Create 'decodedData' array with all assoziative array elements,
- * except signature.
+ * Create 'decodedData' array with all assoziative array elements.
*/
$decodedData = array(
self::PACKAGE_DATA_SENDER => $decodedArray[self::INDEX_PACKAGE_SENDER],
self::PACKAGE_DATA_RECIPIENT => $decodedArray[self::INDEX_PACKAGE_RECIPIENT],
self::PACKAGE_DATA_CONTENT => $decodedArray[self::INDEX_PACKAGE_CONTENT],
- self::PACKAGE_DATA_STATUS => self::PACKAGE_STATUS_DECODED
+ self::PACKAGE_DATA_STATUS => self::PACKAGE_STATUS_DECODED,
+ self::PACKAGE_DATA_HASH => $decodedArray[self::INDEX_PACKAGE_HASH]
);
// And return it