/* * EMSA-Raw * (C) 1999-2007 Jack Lloyd * * Distributed under the terms of the Botan license */ #include namespace Botan { /* * EMSA-Raw Encode Operation */ void EMSA_Raw::update(const byte input[], u32bit length) { message += std::make_pair(input, length); } /* * Return the raw (unencoded) data */ SecureVector EMSA_Raw::raw_data() { SecureVector output; std::swap(message, output); return output; } /* * EMSA-Raw Encode Operation */ SecureVector EMSA_Raw::encoding_of(const MemoryRegion& msg, u32bit, RandomNumberGenerator&) { return msg; } /* * EMSA-Raw Verify Operation */ bool EMSA_Raw::verify(const MemoryRegion& coded, const MemoryRegion& raw, u32bit) { if(coded.size() == raw.size()) return (coded == raw); if(coded.size() > raw.size()) return false; // handle zero padding differences const u32bit leading_zeros_expected = raw.size() - coded.size(); bool same_modulo_leading_zeros = true; for(u32bit i = 0; i != leading_zeros_expected; ++i) if(raw[i]) same_modulo_leading_zeros = false; if(!same_mem(&coded[0], &raw[leading_zeros_expected], coded.size())) same_modulo_leading_zeros = false; return same_modulo_leading_zeros; } }