/* { dg-do compile } */
|
/* { dg-do compile } */
|
/* { dg-options "-O2" } */
|
/* { dg-options "-O2" } */
|
|
|
typedef unsigned char uint8_t;
|
typedef unsigned char uint8_t;
|
typedef unsigned int uint32_t;
|
typedef unsigned int uint32_t;
|
typedef uint8_t byte;
|
typedef uint8_t byte;
|
typedef uint32_t u32bit;
|
typedef uint32_t u32bit;
|
__extension__ typedef __SIZE_TYPE__ size_t;
|
__extension__ typedef __SIZE_TYPE__ size_t;
|
extern "C" {
|
extern "C" {
|
extern void __warn_memset_zero_len (void) __attribute__((__warning__ ("")));
|
extern void __warn_memset_zero_len (void) __attribute__((__warning__ ("")));
|
extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__))
|
extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__))
|
void * memset (void *__dest, int __ch, size_t __len) throw () {
|
void * memset (void *__dest, int __ch, size_t __len) throw () {
|
if (__builtin_constant_p (__len) && __len == 0)
|
if (__builtin_constant_p (__len) && __len == 0)
|
__warn_memset_zero_len (); /* { dg-warning "" } */
|
__warn_memset_zero_len (); /* { dg-warning "" } */
|
}
|
}
|
}
|
}
|
inline void clear_mem(void* ptr, u32bit n) {
|
inline void clear_mem(void* ptr, u32bit n) {
|
memset(ptr, 0, n);
|
memset(ptr, 0, n);
|
}
|
}
|
template class MemoryRegion {
|
template class MemoryRegion {
|
public:
|
public:
|
u32bit size() const {
|
u32bit size() const {
|
}
|
}
|
const T* begin() const {
|
const T* begin() const {
|
}
|
}
|
void set(const T in[], u32bit n) {
|
void set(const T in[], u32bit n) {
|
create(n);
|
create(n);
|
}
|
}
|
void set(const MemoryRegion& in) {
|
void set(const MemoryRegion& in) {
|
set(in.begin(), in.size());
|
set(in.begin(), in.size());
|
}
|
}
|
void clear() {
|
void clear() {
|
clear_mem(buf, allocated);
|
clear_mem(buf, allocated);
|
}
|
}
|
void create(u32bit);
|
void create(u32bit);
|
MemoryRegion() {
|
MemoryRegion() {
|
used = allocated = 0;
|
used = allocated = 0;
|
}
|
}
|
mutable T* buf;
|
mutable T* buf;
|
mutable u32bit used;
|
mutable u32bit used;
|
mutable u32bit allocated;
|
mutable u32bit allocated;
|
};
|
};
|
template void MemoryRegion::create(u32bit n) {
|
template void MemoryRegion::create(u32bit n) {
|
if(n <= allocated) {
|
if(n <= allocated) {
|
clear();
|
clear();
|
}
|
}
|
}
|
}
|
template class SecureVector : public MemoryRegion {
|
template class SecureVector : public MemoryRegion {
|
public:
|
public:
|
SecureVector& operator=(const MemoryRegion& in) {
|
SecureVector& operator=(const MemoryRegion& in) {
|
if(this != &in) set(in);
|
if(this != &in) set(in);
|
}
|
}
|
};
|
};
|
class OctetString {
|
class OctetString {
|
public:
|
public:
|
SecureVector bits_of() const {
|
SecureVector bits_of() const {
|
}
|
}
|
OctetString& operator^=(const OctetString&);
|
OctetString& operator^=(const OctetString&);
|
void change(const MemoryRegion& in) {
|
void change(const MemoryRegion& in) {
|
bits = in;
|
bits = in;
|
}
|
}
|
OctetString(const MemoryRegion& in) {
|
OctetString(const MemoryRegion& in) {
|
change(in);
|
change(in);
|
}
|
}
|
SecureVector bits;
|
SecureVector bits;
|
};
|
};
|
OctetString& OctetString::operator^=(const OctetString& k) {
|
OctetString& OctetString::operator^=(const OctetString& k) {
|
if(&k == this) {
|
if(&k == this) {
|
bits.clear();
|
bits.clear();
|
}
|
}
|
}
|
}
|
bool operator==(const OctetString& s1, const OctetString& s2) {
|
bool operator==(const OctetString& s1, const OctetString& s2) {
|
return (s1.bits_of() == s2.bits_of());
|
return (s1.bits_of() == s2.bits_of());
|
}
|
}
|
|
|