USP_BBNC_DECRYPTGIFTDATA

Decrypts sensitive information in BBNC GIFTINFORMATION xml field.

Parameters

Parameter Parameter Type Mode Description
@GIFTINFORMATION xml INOUT
@KEYISALREADYOPEN bit IN

Definition

Copy


            CREATE procedure dbo.USP_BBNC_DECRYPTGIFTDATA
            (
                @GIFTINFORMATION xml = null output,
                @KEYISALREADYOPEN bit = 0
            )
            as
            set nocount on;

            --Don't convert a null @GIFTINFORMATION to an empty string 

            if @GIFTINFORMATION is null 
                return 0;

            begin try
                if @KEYISALREADYOPEN = 0 
                    exec dbo.USP_GET_KEY_ACCESS;

                declare @NEWGIFTINFORMATION xml
                set @NEWGIFTINFORMATION = 
                (    
                    select
                        @GIFTINFORMATION as "*",
                        cast(DecryptByKey(@GIFTINFORMATION.value
                        (
                            '(/GIFTINFORMATION/ITEM[FIELDKEY = "CREDITCARDNUMBER"]/NEWVALUE/text())[1]',
                            'varbinary(8000)'
                        )) as nvarchar(4000)) as [DECRYPTEDCCNUMBER],
                        cast(DecryptByKey(@GIFTINFORMATION.value
                        (
                            '(/GIFTINFORMATION/ITEM[FIELDKEY = "ACCOUNTNUMBER"]/NEWVALUE/text())[1]',
                            'varbinary(8000)'
                        )) as nvarchar(4000)) as [DECRYPTEDACCOUNTNUMBER]
                    for xml path(''), binary base64, type
                )

                begin try
            set @NEWGIFTINFORMATION.modify
                    (
                        'replace value of
                            (/GIFTINFORMATION/ITEM[FIELDKEY = "CREDITCARDNUMBER"]/NEWVALUE/text())[1]
                        with
                            (/DECRYPTEDCCNUMBER/text())[1]'        
                    );

                    set @NEWGIFTINFORMATION.modify
                    (
                        'replace value of
                            (/GIFTINFORMATION/ITEM[FIELDKEY = "ACCOUNTNUMBER"]/NEWVALUE/text())[1]
                        with
                            (/DECRYPTEDACCOUNTNUMBER/text())[1]'        
                    );
        end try
        begin catch
              -- if we have an issue decrypting, just replace with a blank

              set @NEWGIFTINFORMATION.modify
                    (
                        'replace value of
                            (/GIFTINFORMATION/ITEM[FIELDKEY = "CREDITCARDNUMBER"]/NEWVALUE/text())[1]
                        with
                            ("")[1]'        
                    );

                    set @NEWGIFTINFORMATION.modify
                    (
                        'replace value of
                            (/GIFTINFORMATION/ITEM[FIELDKEY = "ACCOUNTNUMBER"]/NEWVALUE/text())[1]
                        with
                            ("")[1]'        
                    );
        end catch


                set @NEWGIFTINFORMATION.modify
                (
                    'delete
                        /DECRYPTEDCCNUMBER[1]'
                );

                set @NEWGIFTINFORMATION.modify
                (
                    'delete
                        /DECRYPTEDACCOUNTNUMBER[1]'
                );

                set @GIFTINFORMATION = @NEWGIFTINFORMATION;

                if @KEYISALREADYOPEN = 0 
                    close symmetric key sym_BBInfinity;
            end try
            begin catch
                exec dbo.USP_RAISE_ERROR;

                if @KEYISALREADYOPEN = 0 
                    close symmetric key sym_BBInfinity;

                set @GIFTINFORMATION = null;
                return 0;                    
            end catch

            return 0;