Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
support encryption, transformation
  • Loading branch information
bgaifullin committed Jan 5, 2015
commit 01f8d0d4a275da190ca668fbc3a7a6fbeff01a18
2 changes: 0 additions & 2 deletions setup.cfg
Original file line number Diff line number Diff line change
@@ -1,2 +0,0 @@
[pytest]
addopts = tests -s -rx
12 changes: 5 additions & 7 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# from __future__ import absolute_import, unicode_literals, division
from os import path
from pkgutil import get_importer
from setuptools import setup, Extension
from setuptools import setup, Extension as _Extension
from functools import wraps


Expand Down Expand Up @@ -44,7 +44,7 @@ def __setattr__(self, name, value):
return wrapped


class Extension(Extension, object):
class Extension(_Extension):

lxml_extended = False

Expand Down Expand Up @@ -75,12 +75,12 @@ def make_extension(name, cython=True):
from pkgconfig import parse

# Declare the crypto implementation.
XMLSEC_CRYPTO = 'openssl'
xmlsec_crypto = 'openssl'

# Process the `pkg-config` utility and discover include and library
# directories.
config = {}
for lib in ['libxml-2.0', 'xmlsec1-%s' % XMLSEC_CRYPTO]:
for lib in ['libxml-2.0', 'xmlsec1-%s' % xmlsec_crypto]:
config.update(parse(lib))

# List-ify config for setuptools.
Expand Down Expand Up @@ -128,9 +128,6 @@ def make_extension(name, cython=True):
install_requires=[
'lxml >= 3.0',
],
extras_require={
'test': ['pytest']
},
package_dir={'xmlsec': 'src/xmlsec'},
packages=['xmlsec'],
ext_modules=[
Expand All @@ -139,6 +136,7 @@ def make_extension(name, cython=True):
make_extension('xmlsec.tree'),
make_extension('xmlsec.key'),
make_extension('xmlsec.ds'),
make_extension('xmlsec.enc'),
make_extension('xmlsec.template'),
]
)
2 changes: 2 additions & 0 deletions src/xmlsec/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
from .utils import *
from .key import *
from .ds import *
from .enc import *
from .error import *
from . import tree, template


Expand Down
17 changes: 17 additions & 0 deletions src/xmlsec/constants.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,28 @@ cdef extern from "xmlsec.h": # xmlsec/strings.h
const_xmlChar* xmlSecNodeObject
const_xmlChar* xmlSecNodeManifest
const_xmlChar* xmlSecNodeSignatureProperties
const_xmlChar* xmlSecNodeEncryptedData
const_xmlChar* xmlSecNodeEncryptedKey

# encryption types
const_xmlChar* xmlSecTypeEncContent
const_xmlChar* xmlSecTypeEncElement

ctypedef unsigned int xmlSecTransformUsage
cdef enum:
xmlSecTransformUsageUnknown=0x0000
xmlSecTransformUsageDSigTransform=0x0001
xmlSecTransformUsageC14NMethod=0x0002
xmlSecTransformUsageDigestMethod=0x0004
xmlSecTransformUsageSignatureMethod=0x0008
xmlSecTransformUsageEncryptionMethod=0x0010
xmlSecTransformUsageAny=0xFFFF

# Transform ids
cdef struct _xmlSecTransformKlass:
const_xmlChar* name
const_xmlChar* href
xmlSecTransformUsage usage

ctypedef _xmlSecTransformKlass *xmlSecTransformId

Expand Down
28 changes: 25 additions & 3 deletions src/xmlsec/constants.pyx
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals, division

from xmlsec.constants cimport *
from xmlsec.utils cimport *
from .constants cimport *
from .utils cimport *

__all__ = [
'Namespace',
'Node',
'Transform'
'Transform',
'EncryptionType'
]


Expand All @@ -24,6 +25,11 @@ class Namespace:
SOAP12 = _u(xmlSecSoap12Ns)


class EncryptionType:
CONTENT = _u(xmlSecTypeEncContent)
ELEMENT = _u(xmlSecTypeEncElement)


class Node:
"""Digital signature nodes."""
SIGNATURE = _u(xmlSecNodeSignature)
Expand All @@ -36,6 +42,22 @@ class Node:
OBJECT = _u(xmlSecNodeObject)
MANIFEST = _u(xmlSecNodeManifest)
SIGNATURE_PROPERTIES = _u(xmlSecNodeSignatureProperties)
ENCRYPTED_DATA = _u(xmlSecNodeEncryptedData)
ENCRYPTED_KEY = _u(xmlSecNodeEncryptedKey)


cdef class _Transform:
property name:
def __get__(self):
return _u(self.target.name)

property href:
def __get__(self):
return _u(self.target.href)

property usage:
def __get__(self):
return self.target.usage


cdef _Transform _mkti(xmlSecTransformId target):
Expand Down
84 changes: 74 additions & 10 deletions src/xmlsec/ds.pxd
Original file line number Diff line number Diff line change
@@ -1,9 +1,64 @@
from lxml.includes.tree cimport xmlNode
from xmlsec.key cimport xmlSecKeyPtr
from .key cimport xmlSecKeyPtr, xmlSecKeyReq, xmlSecKeyReqPtr, xmlSecKeysMngrPtr
from .constants cimport xmlSecTransformId


cdef extern from "xmlsec.h": # xmlsec/keys.h

ctypedef unsigned int xmlSecSize
ctypedef unsigned char xmlSecByte
ctypedef xmlSecByte const_xmlSecByte "const xmlSecByte"

ctypedef void * xmlSecPtrList
ctypedef xmlSecPtrList * xmlSecPtrListPtr
ctypedef void * xmlSecPtr

int xmlSecPtrListAdd(xmlSecPtrListPtr, xmlSecPtr) nogil

int xmlSecPtrListEmpty(xmlSecPtrListPtr) nogil

cdef struct _xmlSecBuffer:
xmlSecByte* data
size_t size
# size_t maxSize
# xmlSecAllocMode allocMode

ctypedef _xmlSecBuffer *xmlSecBufferPtr

# transforms and transform contexts (partial)
ctypedef enum xmlSecTransformStatus:
xmlSecTransformStatusNone = 0
xmlSecTransformStatusWorking
xmlSecTransformStatusFinished
xmlSecTransformStatusOk
xmlSecTransformStatusFail

ctypedef enum xmlSecTransformOperation:
xmlSecTransformOperationNone = 0
xmlSecTransformOperationEncode
xmlSecTransformOperationDecode
xmlSecTransformOperationSign
xmlSecTransformOperationVerify
xmlSecTransformOperationEncrypt
xmlSecTransformOperationDecrypt

cdef struct _xmlSecTransform:
xmlSecTransformOperation operation
xmlSecTransformStatus status

ctypedef _xmlSecTransform* xmlSecTransformPtr

cdef struct _xmlSecTransformCtx:
xmlSecBufferPtr result
xmlSecTransformStatus status

ctypedef _xmlSecTransformCtx xmlSecTransformCtx
ctypedef _xmlSecTransformCtx* xmlSecTransformCtxPtr

cdef struct xmlSecKeyInfoCtx:
xmlSecPtrList enabledKeyData
xmlSecKeyReq keyReq

ctypedef enum xmlSecDSigStatus:
xmlSecDSigStatusUnknown = 0
xmlSecDSigStatusSucceeded = 1
Expand All @@ -13,20 +68,20 @@ cdef extern from "xmlsec.h": # xmlsec/keys.h
# void* userData
# unsigned int flags
# unsigned int flags2
# xmlSecKeyInfoCtx keyInfoReadCtx
xmlSecKeyInfoCtx keyInfoReadCtx
# xmlSecKeyInfoCtx keyInfoWriteCtx
# xmlSecTransformCtx transformCtx
xmlSecTransformCtx transformCtx
# xmlSecTransformUriType enabledReferenceUris
# xmlSecPtrListPtr enabledReferenceTransforms
# xmlSecTransformCtxPreExecuteCallback referencePreExecuteCallback
# xmlSecTransformId defSignMethodId
# xmlSecTransformId defC14NMethodId
# xmlSecTransformId defDigestMethodId
xmlSecKeyPtr signKey
# xmlSecTransformOperation operation
xmlSecTransformOperation operation
# xmlSecBufferPtr result
xmlSecDSigStatus status
# xmlSecTransformPtr signMethod
xmlSecTransformPtr signMethod
# xmlSecTransformPtr c14nMethod
# xmlSecTransformPtr preSignMemBufMethod
# xmlNode* signValueNode
Expand All @@ -38,7 +93,6 @@ cdef extern from "xmlsec.h": # xmlsec/keys.h

ctypedef _xmlSecDSigCtx* xmlSecDSigCtxPtr

ctypedef void* xmlSecKeysMngrPtr

xmlSecDSigCtxPtr xmlSecDSigCtxCreate(xmlSecKeysMngrPtr) nogil

Expand All @@ -48,10 +102,20 @@ cdef extern from "xmlsec.h": # xmlsec/keys.h

int xmlSecDSigCtxVerify(xmlSecDSigCtxPtr, xmlNode*) nogil

# int xmlSecDSigCtxEnableReferenceTransform(
# xmlSecDSigCtxPtr, xmlSecTransformId) nogil
int xmlSecDSigCtxEnableReferenceTransform(
xmlSecDSigCtxPtr, xmlSecTransformId) nogil

# int xmlSecDSigCtxEnableSignatureTransform(
# xmlSecDSigCtxPtr, xmlSecTransformId) nogil
int xmlSecDSigCtxEnableSignatureTransform(
xmlSecDSigCtxPtr, xmlSecTransformId) nogil

void xmlSecDSigCtxDestroy(xmlSecDSigCtxPtr) nogil

xmlSecTransformPtr xmlSecTransformCtxCreateAndAppend(xmlSecTransformCtxPtr, xmlSecTransformId) nogil

int xmlSecTransformSetKey(xmlSecTransformPtr, xmlSecKeyPtr) nogil

int xmlSecTransformSetKeyReq(xmlSecTransformPtr, xmlSecKeyReqPtr) nogil

int xmlSecTransformVerify(xmlSecTransformPtr, const_xmlSecByte*, xmlSecSize, xmlSecTransformCtxPtr) nogil

int xmlSecTransformCtxBinaryExecute(xmlSecTransformCtxPtr, const_xmlSecByte*, xmlSecSize) nogil
Loading