Example #1
0
void cmdSetPin(usbDevice_t *dev){
    uint8_t pinHash[16];
    uint8_t ePinHash[16];
    //Build pinHash from globalArgs.pin
    memcpy(pinHash,globalArgs.pin,4);
    memcpy(&pinHash[4],globalArgs.pin,4);
    memcpy(&pinHash[8],globalArgs.pin,4);
    memcpy(&pinHash[12],globalArgs.pin,4);

    ncrypt(pinHash,ePinHash,sizeof(pinHash));
    HIDwrite(dev,2,ePinHash,16);
    hexdump(ePinHash,sizeof(ePinHash));
}
Example #2
0
    DataBuf nikonCrypt(uint16_t tag, const byte* pData, uint32_t size, TiffComponent* const pRoot)
    {
        DataBuf buf;

        if (size < 4) return buf;
        const NikonArrayIdx* nci = find(nikonArrayIdx, NikonArrayIdx::Key(tag, reinterpret_cast<const char*>(pData), size));
        if (nci == 0 || nci->start_ == NA || size <= nci->start_) return buf;

        // Find Exif.Nikon3.ShutterCount
        TiffFinder finder(0x00a7, nikon3Id);
        pRoot->accept(finder);
        TiffEntryBase* te = dynamic_cast<TiffEntryBase*>(finder.result());
        if (!te || !te->pValue() || te->pValue()->count() == 0) return buf;
        uint32_t count = static_cast<uint32_t>(te->pValue()->toLong());

        // Find Exif.Nikon3.SerialNumber
        finder.init(0x001d, nikon3Id);
        pRoot->accept(finder);
        te = dynamic_cast<TiffEntryBase*>(finder.result());
        if (!te || !te->pValue() || te->pValue()->count() == 0) return buf;
        bool ok(false);
        uint32_t serial = stringTo<uint32_t>(te->pValue()->toString(), ok);
        if (!ok) {
            std::string model = getExifModel(pRoot);
            if (model.empty()) return buf;
            if (model.find("D50") != std::string::npos) {
                serial = 0x22;
            }
            else {
                serial = 0x60;
            }
        }
        buf.alloc(size);
        memcpy(buf.pData_, pData, buf.size_);
        ncrypt(buf.pData_ + nci->start_, buf.size_ - nci->start_, count, serial);
        return buf;
    }
Example #3
0
uint16_t readXML(char* filePath)
{
    XMLDoc doc;
    XMLSearch search;
    XMLNode* node;
//    XMLNode* child;
    
    XMLNode *name,*user,*hop,*pass,*submit; 

    XMLDoc_init(&doc);
    XMLDoc_parse_file_DOM(filePath, &doc);

    XMLSearch_init(&search);
    XMLSearch_search_set_tag(&search, "cred");
    //XMLSearch_search_add_attribute(&search, "presence", NULL);
    //XMLSearch_search_add_attribute(&search, "value", "a*");
    
    uint8_t* buffptr = flashMemory;
    uint8_t* nextCredential_ptr;
    uint8_t* encryptStart;
    uint16_t length;

    node = doc.nodes[doc.i_root];
    if (XMLSearch_node_matches(node, &search))
            fprintf( stderr, "Found match: <%s>\n", node->tag);
    while ((node = XMLSearch_next(node, &search)) != NULL) {
            
        //child = XMLNode_next(node);
        //XMLNode* XMLNode_get_child(const XMLNode* node, int i_child);
        if (XMLNode_get_children_count(node) != 5)
        {
            fprintf( stderr, "[ERROR] BAD XML FILE");
        }
        else
        {
            name = XMLNode_get_child(node, 0);
            user = XMLNode_get_child(node, 1);
            hop = XMLNode_get_child(node, 2);
            pass = XMLNode_get_child(node, 3);
            submit = XMLNode_get_child(node, 4);

            fprintf( stderr, "Name: %s\n", name->text);
            fprintf( stderr, "User: %s\n", user->text);
            fprintf( stderr, "Hop:  %s\n", hop->text);
            fprintf( stderr, "Pass: %s\n", pass->text);
            fprintf( stderr, "Submit: %s\n", submit->text);
            
            
            if(name->text != 0)
                buffptr = buffptr + sprintf((char*)buffptr, "%s", name->text);
            else
                *buffptr = 0;
            buffptr += 1;
            
            nextCredential_ptr = buffptr;
            buffptr += 2;
            
            encryptStart = buffptr; // encryption must start here ! 
            
            if(user->text != 0)
                buffptr = buffptr + sprintf((char*)buffptr, "%s", user->text);
            else
                *buffptr = 0;
            buffptr += 1;
            
            if(hop->text != 0)
                buffptr = buffptr + sprintf((char*)buffptr, "%s", hop->text);
            else
                *buffptr = 0;
            buffptr += 1;
            
            if(pass->text != 0)
                buffptr = buffptr + sprintf((char*)buffptr, "%s", pass->text);
            else
                *buffptr = 0;
            buffptr += 1;
            
            if(submit->text != 0)
                buffptr = buffptr + sprintf((char*)buffptr, "%s", submit->text);
            else
                *buffptr = 0;
            buffptr += 1;
            
            // call encryption here !
            uint8_t source[4096];
            uint8_t dest[4096];
            uint16_t len = buffptr - encryptStart;
            // buffptr must be incremented to meet block size of encryption
            
	    if( (len % 16) != 0)
            {
            // block must be multiple of 16
	    len = ((len / 16) + 1) * 16;
            buffptr = encryptStart + len;
	    }


            memset((void*)source, 0, sizeof(source));
            memset((void*)dest, 0, sizeof(source));

            // copy credentials into 
            memcpy((void*)(source), (void*)encryptStart, len);

            fprintf(stderr, "\n PLAIN BLOCK TEXT\n" );

            fprintf(stderr, "\n ENCRYPTED BLOCK LEN %d\n",len );
            // start encryption here!
            length = ncrypt(source, dest, len);
            hexdump(encryptStart, len);
            memcpy((void*)encryptStart, dest, len);
            hexdump(encryptStart, len);
            fprintf(stderr, "\n -----------------\n " );


            uint16_t ptr = ((buffptr) - flashMemory);
            *nextCredential_ptr = (ptr & 0x00FF);
            *(nextCredential_ptr+1) = (ptr & 0xFF00)>> 8;

       }
        
    }

    *nextCredential_ptr = 0;
    *(nextCredential_ptr+1) = 0;

    uint16_t size = (buffptr - flashMemory);

    hexdump(flashMemory, size);
    
    XMLSearch_free(&search, true);
    XMLDoc_free(&doc);
    
    return size;
}