Giter VIP home page Giter VIP logo

cryptoauth_usecase_secureboot's Introduction

SecureBoot

Introduction

The Microchip ATECC608A device is a member of the CryptoAuthentication™ family of high-security cryptographic devices, which combine world-class hardware-based key storage with hardware cryptographic accelerators in order to implement various authentication and encryption protocols. ATECC608A provides a mechanism to support secure boot operations in a connected microcontroller unit (MCU) that can help identify situations in which fraudulent code has been installed on the host central processing unit (CPU).

SecureBoot is a new feature on this device compared to earlier Crypto devices from Microchip. This feature helps MCU to identify fraudulent code installed on it. When this feature is implemented, MCU can send either digest/signature or both to ECC608A. Then, ECC608A validates this information and responds to host either with yes/no or with MAC value.

The device provides options to store signature or digest to reduce execution time, in this case digest will be simply compared with preloaded value or signature will be verified using Public Key. It also supports wire protection to protect system when connections between MCU and device is replaced with fraudulent signals.

This use case is built upon AT88CKSCKTSOIC-XPRO and ATSAMD21-XPRO board using CryptoAuthLib and ASF. Two ASF examples are used as base projects,

Updates to bootloader

The SAMD21 acts as host MCU and ATECC608A as CryptoAuthentication device. ASF SAM-BA Monitor application is updated to include CryptoAuthLib and SecureBoot functionality.

  • Invoke crypto_device_verify_app....Return value ATCA_SUCCESS indicates application is valid, otherwise application is invalid.

Hardware Requirements

Following are the hardware modules required to do hands on of this this usecase example

Buy Secure Boot hardware

Additional Weblinks

For detailed documentation refer to repository wiki.

cryptoauth_usecase_secureboot's People

Contributors

kalyancmanukonda avatar chrisberg-microchip avatar

Stargazers

Stephen Murphy avatar  avatar  avatar Travis Haagen avatar Jaden J avatar Freddie Chen avatar Gerad Munsch avatar

Watchers

James Cloos avatar Srinivas Edireswarapu avatar Bryan Hunt avatar  avatar Jaden J avatar  avatar  avatar  avatar  avatar

cryptoauth_usecase_secureboot's Issues

sboot_provisioning.py not working with ATECC608B

Hello, I cloned this repository to try the capabilities of Secure Boot of the ATECC608B with the SAMD21 XPLAINED PRO. I am trying to provison the Device with the sboot_provisioning.py:

python sboot_provisioning.py -k key.pem -m FullDig

225
Traceback (most recent call last):
File "C:\Users\selinger\Documents\cryptoauth_usecase_secureboot\PythonScripts\sboot_provisioning.py", line 117, in <module> init_device('hid')
File "C:\Users\selinger\Documents\cryptoauth_usecase_secureboot\PythonScripts\sboot_provisioning.py", line 86, in init_device assert atcab_init(cfg) == ATCA_SUCCESS
AssertionError

atcab_init(cfg) returns 0xE1 which is the Error Code ATCA_GEN_FAIL unspecified error.

Do I have to change some configs to get it working with the ATECC608B or any ideas how to fix this problem?
Any help would be much appreciated. Thank you.

SAMBA_D21_BOOTLOADER1 not building

Hi, I cloned this repository to attempt to investigate the capabilities of the ATECC608 with the SAMD21 XPLAINED PRO. I am trying to build and download the bootloader application provided to the board however the build is failing:
------ Build started: Project: SAMBA_D21_BOOTLOADER1, Configuration: Debug ARM ------
Build started.
Project "SAMBA_D21_BOOTLOADER1.cproj" (default targets):
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Compiler.targets" from project "C:\Users\gsullivan\Desktop\cryptoauth_usecase_secureboot\SAMBA_BOOTLOADER\SAMBA_D21_BOOTLOADER1\SAMBA_D21_BOOTLOADER1.cproj" (target "Build" depends on it):
Task "RunCompilerTask"
Shell Utils Path C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils
C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils\make.exe all --jobs --output-sync
make: *** No rule to make target '../src/cryptoauthlib/app/secure_boot/secure_boot.c', needed by 'src/cryptoauthlib/app/secure_boot/secure_boot.o'. Stop.
make: *** Waiting for unfinished jobs....
Building file: ../src/ASF/common2/services/delay/sam0/cycle_counter.c
Invoking: ARM/GNU C Compiler : 6.3.1
"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-gcc.exe" -x c -mthumb -D__SAMD21J18A__ -DDEBUG -DBOARD=SAMD21_XPLAINED_PRO -D__SAMD21J18A__ -DARM_MATH_CM0PLUS=true -DUDD_ENABLE -DEXTINT_CALLBACK_MODE=true -DUSART_CALLBACK_MODE=true -DUSB_DEVICE_LPM_SUPPORT -DCYCLE_MODE -DI2C_MASTER_CALLBACK_MODE=false -DATCA_HAL_I2C -DADC_CALLBACK_MODE=false -I"../src/ASF/sam0/boards/samd21_xplained_pro" -I"../src/ASF/sam0/boards" -I"../src/ASF/sam0/utils/cmsis/samd21/include" -I"../src/ASF/sam0/utils/cmsis/samd21/source" -I"../src/ASF/sam0/utils" -I"../src/ASF/sam0/utils/header_files" -I"../src/ASF/sam0/utils/preprocessor" -I"../src/ASF/thirdparty/CMSIS/Include" -I"../src/ASF/thirdparty/CMSIS/Lib/GCC" -I"../src/ASF/common/utils" -I"../src/ASF/common/boards" -I"../src/ASF/sam0/drivers/port" -I"../src/ASF/sam0/drivers/system/pinmux" -I"../src" -I"../src/ASF/sam0/drivers/sercom/usart" -I"../src/ASF/sam0/drivers/sercom" -I"../src/ASF/sam0/drivers/system" -I"../src/ASF/sam0/drivers/system/clock/clock_samd21_r21_da_ha1" -I"../src/ASF/sam0/drivers/system/clock" -I"../src/ASF/sam0/drivers/system/interrupt" -I"../src/ASF/sam0/drivers/system/interrupt/system_interrupt_samd21" -I"../src/ASF/sam0/drivers/system/power" -I"../src/ASF/sam0/drivers/system/power/power_sam_d_r_h" -I"../src/ASF/sam0/drivers/system/reset" -I"../src/ASF/sam0/drivers/system/reset/reset_sam_d_r_h" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/usb/class/cdc/device" -I"../src/ASF/common/services/usb/class/cdc" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/sam0/drivers/usb" -I"../src/ASF/sam0/drivers/usb/usb_sam_d_r" -I"../src/ASF/sam0/drivers/usb/stack_interface" -I"../src/ASF/sam0/drivers/extint" -I"../src/ASF/common/services/usb" -I"../src/config" -I"../src/ASF/common2/services/delay" -I"../src/ASF/common2/services/delay/sam0" -I"../src/ASF/sam0/drivers/sercom/i2c" -I"../src/ASF/sam0/drivers/sercom/i2c/i2c_sam0" -I"../src/cryptoauthlib" -I"../src/cryptoauthlib/lib" -I"../src/cryptoauthlib/app/secure_boot" -I"../src/ASF/sam0/drivers/nvm" -I"../src/ASF/sam0/drivers/adc" -I"../src/ASF/sam0/drivers/adc/adc_sam_d_r_h" -O1 -fdata-sections -ffunction-sections -mlong-calls -g3 -Wall -mcpu=cortex-m0plus -c -pipe -fno-strict-aliasing -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -std=gnu99 -ffunction-sections -fdata-sections -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return -Wmissing-declarations -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs -Wlong-long -Wunreachable-code -Wcast-align --param max-inline-insns-single=500 -MD -MP -MF "src/ASF/common2/services/delay/sam0/cycle_counter.d" -MT"src/ASF/common2/services/delay/sam0/cycle_counter.d" -MT"src/ASF/common2/services/delay/sam0/cycle_counter.o" -o "src/ASF/common2/services/delay/sam0/cycle_counter.o" "../src/ASF/common2/services/delay/sam0/cycle_counter.c"
Finished building: ../src/ASF/common2/services/delay/sam0/cycle_counter.c
Building file: ../src/ASF/sam0/drivers/sercom/i2c/i2c_sam0/i2c_master.c
Invoking: ARM/GNU C Compiler : 6.3.1
"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-gcc.exe" -x c -mthumb -D__SAMD21J18A__ -DDEBUG -DBOARD=SAMD21_XPLAINED_PRO -D__SAMD21J18A__ -DARM_MATH_CM0PLUS=true -DUDD_ENABLE -DEXTINT_CALLBACK_MODE=true -DUSART_CALLBACK_MODE=true -DUSB_DEVICE_LPM_SUPPORT -DCYCLE_MODE -DI2C_MASTER_CALLBACK_MODE=false -DATCA_HAL_I2C -DADC_CALLBACK_MODE=false -I"../src/ASF/sam0/boards/samd21_xplained_pro" -I"../src/ASF/sam0/boards" -I"../src/ASF/sam0/utils/cmsis/samd21/include" -I"../src/ASF/sam0/utils/cmsis/samd21/source" -I"../src/ASF/sam0/utils" -I"../src/ASF/sam0/utils/header_files" -I"../src/ASF/sam0/utils/preprocessor" -I"../src/ASF/thirdparty/CMSIS/Include" -I"../src/ASF/thirdparty/CMSIS/Lib/GCC" -I"../src/ASF/common/utils" -I"../src/ASF/common/boards" -I"../src/ASF/sam0/drivers/port" -I"../src/ASF/sam0/drivers/system/pinmux" -I"../src" -I"../src/ASF/sam0/drivers/sercom/usart" -I"../src/ASF/sam0/drivers/sercom" -I"../src/ASF/sam0/drivers/system" -I"../src/ASF/sam0/drivers/system/clock/clock_samd21_r21_da_ha1" -I"../src/ASF/sam0/drivers/system/clock" -I"../src/ASF/sam0/drivers/system/interrupt" -I"../src/ASF/sam0/drivers/system/interrupt/system_interrupt_samd21" -I"../src/ASF/sam0/drivers/system/power" -I"../src/ASF/sam0/drivers/system/power/power_sam_d_r_h" -I"../src/ASF/sam0/drivers/system/reset" -I"../src/ASF/sam0/drivers/system/reset/reset_sam_d_r_h" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/usb/class/cdc/device" -I"../src/ASF/common/services/usb/class/cdc" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/sam0/drivers/usb" -I"../src/ASF/sam0/drivers/usb/usb_sam_d_r" -I"../src/ASF/sam0/drivers/usb/stack_interface" -I"../src/ASF/sam0/drivers/extint" -I"../src/ASF/common/services/usb" -I"../src/config" -I"../src/ASF/common2/services/delay" -I"../src/ASF/common2/services/delay/sam0" -I"../src/ASF/sam0/drivers/sercom/i2c" -I"../src/ASF/sam0/drivers/sercom/i2c/i2c_sam0" -I"../src/cryptoauthlib" -I"../src/cryptoauthlib/lib" -I"../src/cryptoauthlib/app/secure_boot" -I"../src/ASF/sam0/drivers/nvm" -I"../src/ASF/sam0/drivers/adc" -I"../src/ASF/sam0/drivers/adc/adc_sam_d_r_h" -O1 -fdata-sections -ffunction-sections -mlong-calls -g3 -Wall -mcpu=cortex-m0plus -c -pipe -fno-strict-aliasing -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -std=gnu99 -ffunction-sections -fdata-sections -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return -Wmissing-declarations -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs -Wlong-long -Wunreachable-code -Wcast-align --param max-inline-insns-single=500 -MD -MP -MF "src/ASF/sam0/drivers/sercom/i2c/i2c_sam0/i2c_master.d" -MT"src/ASF/sam0/drivers/sercom/i2c/i2c_sam0/i2c_master.d" -MT"src/ASF/sam0/drivers/sercom/i2c/i2c_sam0/i2c_master.o" -o "src/ASF/sam0/drivers/sercom/i2c/i2c_sam0/i2c_master.o" "../src/ASF/sam0/drivers/sercom/i2c/i2c_sam0/i2c_master.c"
Finished building: ../src/ASF/sam0/drivers/sercom/i2c/i2c_sam0/i2c_master.c
Building file: ../src/ASF/sam0/drivers/adc/adc_sam_d_r_h/adc.c
Invoking: ARM/GNU C Compiler : 6.3.1
"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-gcc.exe" -x c -mthumb -D__SAMD21J18A__ -DDEBUG -DBOARD=SAMD21_XPLAINED_PRO -D__SAMD21J18A__ -DARM_MATH_CM0PLUS=true -DUDD_ENABLE -DEXTINT_CALLBACK_MODE=true -DUSART_CALLBACK_MODE=true -DUSB_DEVICE_LPM_SUPPORT -DCYCLE_MODE -DI2C_MASTER_CALLBACK_MODE=false -DATCA_HAL_I2C -DADC_CALLBACK_MODE=false -I"../src/ASF/sam0/boards/samd21_xplained_pro" -I"../src/ASF/sam0/boards" -I"../src/ASF/sam0/utils/cmsis/samd21/include" -I"../src/ASF/sam0/utils/cmsis/samd21/source" -I"../src/ASF/sam0/utils" -I"../src/ASF/sam0/utils/header_files" -I"../src/ASF/sam0/utils/preprocessor" -I"../src/ASF/thirdparty/CMSIS/Include" -I"../src/ASF/thirdparty/CMSIS/Lib/GCC" -I"../src/ASF/common/utils" -I"../src/ASF/common/boards" -I"../src/ASF/sam0/drivers/port" -I"../src/ASF/sam0/drivers/system/pinmux" -I"../src" -I"../src/ASF/sam0/drivers/sercom/usart" -I"../src/ASF/sam0/drivers/sercom" -I"../src/ASF/sam0/drivers/system" -I"../src/ASF/sam0/drivers/system/clock/clock_samd21_r21_da_ha1" -I"../src/ASF/sam0/drivers/system/clock" -I"../src/ASF/sam0/drivers/system/interrupt" -I"../src/ASF/sam0/drivers/system/interrupt/system_interrupt_samd21" -I"../src/ASF/sam0/drivers/system/power" -I"../src/ASF/sam0/drivers/system/power/power_sam_d_r_h" -I"../src/ASF/sam0/drivers/system/reset" -I"../src/ASF/sam0/drivers/system/reset/reset_sam_d_r_h" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/usb/class/cdc/device" -I"../src/ASF/common/services/usb/class/cdc" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/sam0/drivers/usb" -I"../src/ASF/sam0/drivers/usb/usb_sam_d_r" -I"../src/ASF/sam0/drivers/usb/stack_interface" -I"../src/ASF/sam0/drivers/extint" -I"../src/ASF/common/services/usb" -I"../src/config" -I"../src/ASF/common2/services/delay" -I"../src/ASF/common2/services/delay/sam0" -I"../src/ASF/sam0/drivers/sercom/i2c" -I"../src/ASF/sam0/drivers/sercom/i2c/i2c_sam0" -I"../src/cryptoauthlib" -I"../src/cryptoauthlib/lib" -I"../src/cryptoauthlib/app/secure_boot" -I"../src/ASF/sam0/drivers/nvm" -I"../src/ASF/sam0/drivers/adc" -I"../src/ASF/sam0/drivers/adc/adc_sam_d_r_h" -O1 -fdata-sections -ffunction-sections -mlong-calls -g3 -Wall -mcpu=cortex-m0plus -c -pipe -fno-strict-aliasing -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -std=gnu99 -ffunction-sections -fdata-sections -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return -Wmissing-declarations -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs -Wlong-long -Wunreachable-code -Wcast-align --param max-inline-insns-single=500 -MD -MP -MF "src/ASF/sam0/drivers/adc/adc_sam_d_r_h/adc.d" -MT"src/ASF/sam0/drivers/adc/adc_sam_d_r_h/adc.d" -MT"src/ASF/sam0/drivers/adc/adc_sam_d_r_h/adc.o" -o "src/ASF/sam0/drivers/adc/adc_sam_d_r_h/adc.o" "../src/ASF/sam0/drivers/adc/adc_sam_d_r_h/adc.c"
Finished building: ../src/ASF/sam0/drivers/adc/adc_sam_d_r_h/adc.c
Building file: ../src/ASF/sam0/drivers/nvm/nvm.c
Invoking: ARM/GNU C Compiler : 6.3.1
"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\arm\arm-gnu-toolchain\bin\arm-none-eabi-gcc.exe" -x c -mthumb -D__SAMD21J18A__ -DDEBUG -DBOARD=SAMD21_XPLAINED_PRO -D__SAMD21J18A__ -DARM_MATH_CM0PLUS=true -DUDD_ENABLE -DEXTINT_CALLBACK_MODE=true -DUSART_CALLBACK_MODE=true -DUSB_DEVICE_LPM_SUPPORT -DCYCLE_MODE -DI2C_MASTER_CALLBACK_MODE=false -DATCA_HAL_I2C -DADC_CALLBACK_MODE=false -I"../src/ASF/sam0/boards/samd21_xplained_pro" -I"../src/ASF/sam0/boards" -I"../src/ASF/sam0/utils/cmsis/samd21/include" -I"../src/ASF/sam0/utils/cmsis/samd21/source" -I"../src/ASF/sam0/utils" -I"../src/ASF/sam0/utils/header_files" -I"../src/ASF/sam0/utils/preprocessor" -I"../src/ASF/thirdparty/CMSIS/Include" -I"../src/ASF/thirdparty/CMSIS/Lib/GCC" -I"../src/ASF/common/utils" -I"../src/ASF/common/boards" -I"../src/ASF/sam0/drivers/port" -I"../src/ASF/sam0/drivers/system/pinmux" -I"../src" -I"../src/ASF/sam0/drivers/sercom/usart" -I"../src/ASF/sam0/drivers/sercom" -I"../src/ASF/sam0/drivers/system" -I"../src/ASF/sam0/drivers/system/clock/clock_samd21_r21_da_ha1" -I"../src/ASF/sam0/drivers/system/clock" -I"../src/ASF/sam0/drivers/system/interrupt" -I"../src/ASF/sam0/drivers/system/interrupt/system_interrupt_samd21" -I"../src/ASF/sam0/drivers/system/power" -I"../src/ASF/sam0/drivers/system/power/power_sam_d_r_h" -I"../src/ASF/sam0/drivers/system/reset" -I"../src/ASF/sam0/drivers/system/reset/reset_sam_d_r_h" -I"../src/ASF/common/services/sleepmgr" -I"../src/ASF/common/services/usb/class/cdc/device" -I"../src/ASF/common/services/usb/class/cdc" -I"../src/ASF/common/services/usb/udc" -I"../src/ASF/sam0/drivers/usb" -I"../src/ASF/sam0/drivers/usb/usb_sam_d_r" -I"../src/ASF/sam0/drivers/usb/stack_interface" -I"../src/ASF/sam0/drivers/extint" -I"../src/ASF/common/services/usb" -I"../src/config" -I"../src/ASF/common2/services/delay" -I"../src/ASF/common2/services/delay/sam0" -I"../src/ASF/sam0/drivers/sercom/i2c" -I"../src/ASF/sam0/drivers/sercom/i2c/i2c_sam0" -I"../src/cryptoauthlib" -I"../src/cryptoauthlib/lib" -I"../src/cryptoauthlib/app/secure_boot" -I"../src/ASF/sam0/drivers/nvm" -I"../src/ASF/sam0/drivers/adc" -I"../src/ASF/sam0/drivers/adc/adc_sam_d_r_h" -O1 -fdata-sections -ffunction-sections -mlong-calls -g3 -Wall -mcpu=cortex-m0plus -c -pipe -fno-strict-aliasing -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -std=gnu99 -ffunction-sections -fdata-sections -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return -Wmissing-declarations -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs -Wlong-long -Wunreachable-code -Wcast-align --param max-inline-insns-single=500 -MD -MP -MF "src/ASF/sam0/drivers/nvm/nvm.d" -MT"src/ASF/sam0/drivers/nvm/nvm.d" -MT"src/ASF/sam0/drivers/nvm/nvm.o" -o "src/ASF/sam0/drivers/nvm/nvm.o" "../src/ASF/sam0/drivers/nvm/nvm.c"
Finished building: ../src/ASF/sam0/drivers/nvm/nvm.c
Done executing task "RunCompilerTask" -- FAILED.

Any ideas what's going on here? Any help would be much appreciated. Thank you.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.