summaryrefslogtreecommitdiff
path: root/pyasn1
diff options
context:
space:
mode:
authorelie <elie>2015-06-21 20:33:56 +0000
committerelie <elie>2015-06-21 20:33:56 +0000
commite0e25b8d99bdffcc26faf48982c7aa993f261379 (patch)
treea35cf813ad56458e205b9a9414884a763d7c7009 /pyasn1
parentfe784bc6e56bcd75d613b01f9d2d912a32f2dce2 (diff)
downloadpyasn1-e0e25b8d99bdffcc26faf48982c7aa993f261379.tar.gz
CER/DER Time types encoding restrictions relaxed
Diffstat (limited to 'pyasn1')
-rw-r--r--pyasn1/codec/cer/encoder.py19
1 files changed, 10 insertions, 9 deletions
diff --git a/pyasn1/codec/cer/encoder.py b/pyasn1/codec/cer/encoder.py
index 2dd928a..61ce8a1 100644
--- a/pyasn1/codec/cer/encoder.py
+++ b/pyasn1/codec/cer/encoder.py
@@ -34,32 +34,33 @@ class RealEncoder(encoder.RealEncoder):
class GeneralizedTimeEncoder(OctetStringEncoder):
zchar = str2octs('Z')
+ pluschar = str2octs('+')
+ minuschar = str2octs('-')
zero = str2octs('0')
def encodeValue(self, encodeFun, client, defMode, maxChunkSize):
octets = client.asOctets()
- if '+' in octets:
- raise error.PyAsn1Error('Must be UTC time: %r' % octets)
# This breaks too many existing data items
# if '.' not in octets:
# raise error.PyAsn1Error('Format must include fraction of second: %r' % octets)
- if octets and octets[-1] != self.zchar:
- raise error.PyAsn1Error('Missing timezone specifier: %r' % octets)
if len(octets) < 15:
raise error.PyAsn1Error('Bad UTC time length: %r' % octets)
- if octets[-2] == self.zero or \
- octets[-3] != self.zero and octets[-2] == self.zero:
- raise error.PyAsn1Error('Meningless zero in fraction of second: %r' % octets)
+ if self.pluschar in octets or self.minuschar in octets:
+ raise error.PyAsn1Error('Must be UTC time: %r' % octets)
+ if octets[-1] != self.zchar[0]:
+ raise error.PyAsn1Error('Missing timezone specifier: %r' % octets)
return encoder.OctetStringEncoder.encodeValue(
self, encodeFun, client, defMode, 1000
)
class UTCTimeEncoder(encoder.OctetStringEncoder):
zchar = str2octs('Z')
+ pluschar = str2octs('+')
+ minuschar = str2octs('-')
def encodeValue(self, encodeFun, client, defMode, maxChunkSize):
octets = client.asOctets()
- if '+' in octets:
+ if self.pluschar in octets or self.minuschar in octets:
raise error.PyAsn1Error('Must be UTC time: %r' % octets)
- if octets and octets[-1] != self.zchar:
+ if octets and octets[-1] != self.zchar[0]:
client = client.clone(octets + self.zchar)
if len(client) != 13:
raise error.PyAsn1Error('Bad UTC time length: %r' % client)